Name

sn_oe_sfs.VaAdminConsoleMetrics

Description

No description available

Script

var VaAdminConsoleMetrics = Class.create();
VaAdminConsoleMetrics.prototype = {


  initialize: function() {
      this.POSITIVE_TREND_COLOR = "49, 163, 84";
      this.NEGATIVE_TREND_COLOR = "222, 45, 38";
      this.DEFAULT_TREND_COLOR = "0,0,0";
  },

  getConversations: function(startDate, endDate) {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var _result = new sn_ci_analytics.VADashboardMetrics().getConversationTrend(startDate, endDate);
          gs.info(JSON.stringify(_result));
          return this.getPARFormattedData("totalSessions", _result, startDate);
      }
  },

  getActiveUsers: function(startDate, endDate) {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var _result = new sn_ci_analytics.VADashboardMetrics().getActiveUsersTrend(startDate, endDate);
          gs.info(JSON.stringify(_result));
          return this.getPARFormattedData("totalUsers", _result, startDate);
      }
  },

  getDeflections: function(startDate, endDate) {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var _result = new sn_ci_analytics.VADashboardMetrics().getDeflectionTrend(startDate, endDate);
          gs.info(JSON.stringify(_result));
          return this.getPARFormattedData("total_deflection_metrics_count", _result, startDate);
      }
  },

  getVASuccessTrend: function(startDate, endDate) {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var _result = new sn_ci_analytics.VADashboardMetrics().getVASuccessTrend(startDate, endDate);
          gs.info(JSON.stringify(_result));
          return this.getPARFormattedData("selfSolveRate", _result, startDate);
      }
  },

  getPARFormattedData: function(type, data, startDate) {

      var cData = {
          type: type
      };
      var chartData = data.chartData || [];
      for (var i = 0; i < chartData.length; i++) {
          chartData[i].value = chartData[i].y0;
      }
      cData.chartData = chartData;

      if (!data.change) {
          cData.changeArrow = "steady";
      } else if (data.change && data.change.includes("-")) { //negativeValueIndicator
          cData.changeArrow = "down";
          cData.changeColor = this.NEGATIVE_TREND_COLOR;
          cData.sparklineColor = this._getSparkLineColor("negative") || this.DEFAULT_TREND_COLOR;
      } else {
          cData.changeArrow = "up";
          cData.changeColor = this.POSITIVE_TREND_COLOR;
          cData.sparklineColor = this._getSparkLineColor("positive") || this.DEFAULT_TREND_COLOR;
      }

      cData.value = this._numFormatter(data[type] || 0);
      if (data.change && data.change.includes("(") & data.change.includes("%")) {
          cData.change = data.change.slice(0, data.change.indexOf("("));
          cData.changePercent = data.change.slice(data.change.indexOf("(") + 1, data.change.indexOf("%"));
      } else {
          cData.change = data.change;
      }

      cData.previousScoreDate = new GlideDateTime(startDate).getDate().getByFormat('MMM d');

      return this._getPARDataFormat(cData);
  },

  _getPARDataFormat: function(cData) {
      var _title = this._getTitle(cData.type);
      var _changeWithPercentage = (cData.change || '0') + " " + "(" + (cData.changePercent || '0') + "%" + ")";
      return [{
          "data": [{
              "value": cData.value,
              "change": _changeWithPercentage
          }],
          "metadata": {
              "dataSourceLabel": _title,
              "previousScoreDate": cData.previousScoreDate,
              "changeArrow": cData.changeArrow || "steady",
              "changeColor": {
                  "defaultColor": cData.changeColor || this.DEFAULT_TREND_COLOR
              },
              "aggregate": {
                  "fieldType": "decimal"
              },
              "format": {
                  "unitFormat": "{0}",
                  "frequency": "daily",
                  "precision": 0
              }
          },
          "sparkline": {
              "data": cData.chartData,
              "metadata": {
                  "dataSourceLabel": _title,
                  "series": [{
                      "label": _title,
                      "id": "value",
                      "type": "value"
                  }],
                  "aggregate": {
                      "fieldType": "decimal"
                  },
                  "format": {
                      "unitFormat": "{0}",
                      "frequency": "daily",
                      "precision": 0
                  }
              }
          },
          "sparklineColor": cData.sparklineColor
      }];

  },

  _getTitle: function(type) {
      if (type == "totalSessions") {
          title = gs.getMessage("Conversations");
      } else if (type == "totalUsers") {
          title = gs.getMessage("Active users");
      } else if (type == "total_deflection_metrics_count") {
          title = gs.getMessage("Issues deflected");
      } else if (type == "selfSolveRate") {
          title = gs.getMessage("Bot success");
      }
      return title;
  },
  _numFormatter: function(num) {
      var million = Math.pow(10, 6);
      var billion = Math.pow(10, 9);
      var convertedNum = 0;
      var suffix = '';
      if (num > 999 && num < million) {
          suffix = 'K';
          convertedNum = (num / 1000).toFixed(2);
      } else if (num >= million && num < billion) {
          suffix = 'M';
          convertedNum = (num / million).toFixed(2);
      } else if (num >= billion) {
          suffix = 'B';
          convertedNum = (num / billion).toFixed(2);
      } else {
          convertedNum = num;
      }
      var intNum = parseInt(convertedNum);
      // Remove ".0" and display it as full integer like 1.0K to 1K
      if (convertedNum === intNum) {
          convertedNum = intNum;
      }
      return convertedNum + suffix;
  },

  _getSparkLineColor: function(type) {
      if (type == "negative") {
          return {
              "type": "palette",
              "palette": "fe069951d7100200b96d45a3ce6103c9"
          };
      } else if (type == "positive") {
          return {
              "type": "palette",
              "palette": "08e1d719d7100200b96d45a3ce610375"
          };
      }

      return {};
  },

  getLeastUsedTopics: function() {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var startDate = new GlideDateTime(gs.daysAgo(30)).getDate().toString();
          var endDate = new GlideDateTime().getDate().toString();
          var _result = new sn_ci_analytics.VADashboardMetrics().getEventsData(startDate, endDate, "topics_least_used", 3);
          return _result;
      }
  },
  getUnderPerformedTopics: function() {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var startDate = new GlideDateTime(gs.daysAgo(30)).getDate().toString();
          var endDate = new GlideDateTime().getDate().toString();
          var _result = new sn_ci_analytics.VADashboardMetrics().getEventsData(startDate, endDate, "topics_transferred_to_human_agent", 3);
          return _result;
      }
  },
  getNotCompletedTopics: function() {
      if (sn_ci_analytics && sn_ci_analytics.VADashboardMetrics) {
          var startDate = new GlideDateTime(gs.daysAgo(30)).getDate().toString();
          var endDate = new GlideDateTime().getDate().toString();
          var _result = new sn_ci_analytics.VADashboardMetrics().getEventsData(startDate, endDate, "topics_not_completed_by_user", 3);
          return _result;
      }
  },

  type: 'VaAdminConsoleMetrics'
};

Sys ID

d9c7d3fa1bea0110521acaa2604bcb91

Offical Documentation

Official Docs: