text: /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import Constants from 'yarn-ui/constants';
  
  export default {
    containerIdToAttemptId: function(containerId) {
      if (containerId) {
        var arr = containerId.split('_');
        var attemptId = ["appattempt", arr[1],
          arr[2], this.padding(arr[3], 6)];
        return attemptId.join('_');
      }
    },
    attemptIdToAppId: function(attemptId) {
      if (attemptId) {
        var arr = attemptId.split('_');
        var appId = ["application", arr[1],
          arr[2]].join('_');
        return appId;
      }
    },
    padding: function(str, toLen=2) {
      str = str.toString();
      if (str.length >= toLen) {
        return str;
      }
      return '0'.repeat(toLen - str.length) + str;
    },
    resourceToString: function(mem, cpu) {
      mem = Math.max(0, mem);
      cpu = Math.max(0, cpu);
      return mem + " MBs, " + cpu + " VCores";
    },
    msToElapsedTime: function(timeInMs) {
      var sec_num = timeInMs / 1000; // don't forget the second param
      var hours = Math.floor(sec_num / 3600);
      var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
      var seconds = sec_num - (hours * 3600) - (minutes * 60);
  
      var timeStrArr = [];
  
      if (hours > 0) {
        timeStrArr.push(hours + ' Hrs');
      }
      if (minutes > 0) {
        timeStrArr.push(minutes + ' Mins');
      }
      if (seconds > 0) {
        timeStrArr.push(Math.round(seconds) + " Secs");
      }
      return timeStrArr.join(' : ');
    },
    elapsedTimeToMs: function(elapsedTime) {
      elapsedTime = elapsedTime.toLowerCase();
      var arr = elapsedTime.split(' : ');
      var total = 0;
      for (var i = 0; i < arr.length; i++) {
        if (arr[i].indexOf('hr') > 0) {
          total += parseInt(arr[i].substring(0, arr[i].indexOf(' '))) * 3600;
        } else if (arr[i].indexOf('min') > 0) {
          total += parseInt(arr[i].substring(0, arr[i].indexOf(' '))) * 60;
        } else if (arr[i].indexOf('sec') > 0) {
          total += parseInt(arr[i].substring(0, arr[i].indexOf(' ')));
        }
      }
      return total * 1000;
    },
    timeStampToDate: function(timeStamp) {
      var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD HH:mm:ss");
      return dateTimeString;
    },
    timeStampToDateOnly: function(timeStamp) {
      var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD");
      return dateTimeString;
    },
    dateToTimeStamp: function(date) {
      if (date) {
        var ts = moment(date, "YYYY/MM/DD HH:mm:ss").valueOf();
        return ts;
      }
    },
    isoDateToDate: function(isoDate) {
      return moment(isoDate).format("YYYY/MM/DD HH:mm:ss");
    },
    splitForContainerLogs: function(id) {
      if (id) {
        var splits = id.split(Constants.PARAM_SEPARATOR);
        var splitLen = splits.length;
        if (splitLen < 3) {
          return null;
        }
        var fileName = splits[2];
        var index;
        for (index = 3; index < splitLen; index++) {
          fileName = fileName + Constants.PARAM_SEPARATOR + splits[index];
        }
        return [splits[0], splits[1], fileName];
      }
    },
    memoryToSimpliedUnit: function(mb) {
      var unit = "MB";
      var value = mb;
      if (value / 1024 >= 0.9) {
        value = value / 1024;
        unit = "GB";
      }
      if (value / 1024 >= 0.9) {
        value = value / 1024;
        unit = "TB";
      }
      if (value / 1024 >= 0.9) {
        value = value / 1024;
        unit = "PB";
      }
      return value.toFixed(1) + " " + unit;
    },
    resourceToSimplifiedUnit: function (value, unit) {
      // First convert unit to base unit ("").
      var normalizedValue = value;
      if (unit === "Ki") {
        normalizedValue = normalizedValue * 1024;
      } else if (unit === "Mi") {
        normalizedValue = normalizedValue * 1024 * 1024;
      } else if (unit === "Gi") {
        normalizedValue = normalizedValue * 1024 * 1024 * 1024;
      } else if (unit === "Ti") {
        normalizedValue = normalizedValue * 1024 * 1024 * 1024 * 1024;
      } else if (unit === "Pi") {
        normalizedValue = normalizedValue * 1024 * 1024 * 1024 * 1024 * 1024;
      } else if (unit === "K" || unit === "k") {
        normalizedValue = normalizedValue * 1000;
      } else if (unit === "M" || unit === "m") {
        normalizedValue = normalizedValue * 1000 * 1000;
      } else if (unit === "G" || unit === "g") {
        normalizedValue = normalizedValue * 1000 * 1000 * 1000;
      } else if (unit === "T" || unit === "t") {
        normalizedValue = normalizedValue * 1000 * 1000 * 1000 * 1000;
      } else if (unit === "P" || unit === "p") {
        normalizedValue = normalizedValue * 1000 * 1000 * 1000 * 1000 * 1000;
      }
  
      // From baseunit ("") convert to most human readable unit
      // (which value < 1024 * 0.9).
      var finalUnit = "";
      if (normalizedValue / 1024 >= 0.9) {
        normalizedValue = normalizedValue / 1024;
        finalUnit = "Ki";
      }
      if (normalizedValue / 1024 >= 0.9) {
        normalizedValue = normalizedValue / 1024;
        finalUnit = "Mi";
      }
      if (normalizedValue / 1024 >= 0.9) {
        normalizedValue = normalizedValue / 1024;
        finalUnit = "Gi";
      }
      if (normalizedValue / 1024 >= 0.9) {
        normalizedValue = normalizedValue / 1024;
        finalUnit = "Ti";
      }
      if (normalizedValue / 1024 >= 0.9) {
        normalizedValue = normalizedValue / 1024;
        finalUnit = "Pi";
      }
  
      return normalizedValue.toFixed(1) + " " + finalUnit;
    },
    msToElapsedTimeUnit: function(millisecs, short) {
      var seconds = Math.floor(millisecs / 1000);
      var days = Math.floor(seconds / (3600 * 24));
      var hours = Math.floor(seconds / 3600) - (days * 24);
      var mins = Math.floor((seconds - (hours * 3600) - (days * 24 * 3600)) / 60);
      var secs = seconds - (days * 24 * 3600) - (hours * 3600) - (mins * 60);
      var timeStrArr = [];
      var pluralize = "";
      if (days > 0) {
        pluralize = days > 1? " Days" : " Day";
        timeStrArr.push(days + pluralize);
      }
      if (hours > 0) {
        pluralize = hours > 1? " Hrs" : " Hour";
        timeStrArr.push(hours + pluralize);
      }
      if (mins > 0) {
        pluralize = mins > 1? " Mins" : " Min";
        timeStrArr.push(mins + pluralize);
      }
      pluralize = secs > 1? " Secs" : " Sec";
      timeStrArr.push(secs + pluralize);
      if (short) {
        return timeStrArr[0] + (timeStrArr[1]? " : " + timeStrArr[1] : "");
      }
      return timeStrArr.join(" : ");
    },
    memoryBytesToMB: function(mem) {
      var unit = "MB";
      var value = mem / (1024 * 1024);
      if (value / 1024 >= 0.9) {
        value = value / 1024;
        unit = "GB";
      }
      return value.toFixed(1) + " " + unit;
    }
  };
  