AMBARI-25573: Ambari Metrics save as JSON/CSV use custom fileName instead of default name fixed (#3576)

diff --git a/ambari-web/app/mixins/common/widgets/export_metrics_mixin.js b/ambari-web/app/mixins/common/widgets/export_metrics_mixin.js
index aa4f77c..4be7bea 100644
--- a/ambari-web/app/mixins/common/widgets/export_metrics_mixin.js
+++ b/ambari-web/app/mixins/common/widgets/export_metrics_mixin.js
@@ -63,14 +63,19 @@
     });
   },
 
+  getCustomFileName: function () {
+    return this.get('targetView.title').replace(/\s+/g, '_').toLowerCase();
+  },
+
   exportGraphDataSuccessCallback: function (response, request, params) {
     var seriesData = this.get('targetView').getData(response);
     if (!seriesData.length) {
       App.showAlertPopup(Em.I18n.t('graphs.noData.title'), Em.I18n.t('graphs.noData.tooltip.title'));
     } else {
       var fileType = params.isCSV ? 'csv' : 'json',
-        fileName = 'data.' + fileType,
-        data = params.isCSV ? this.prepareCSV(seriesData) : JSON.stringify(seriesData, this.jsonReplacer(), 4);
+          fileName = (Em.isEmpty(this.get('targetView.title')) ? 'data' : this.getCustomFileName()) + '.' + fileType,
+          data = params.isCSV ? this.prepareCSV(seriesData) : JSON.stringify(seriesData, this.jsonReplacer(), 4);
+
       fileUtils.downloadTextFile(data, fileType, fileName);
     }
   },
diff --git a/ambari-web/app/views/common/widget/graph_widget_view.js b/ambari-web/app/views/common/widget/graph_widget_view.js
index 324358e..c1b7020 100644
--- a/ambari-web/app/views/common/widget/graph_widget_view.js
+++ b/ambari-web/app/views/common/widget/graph_widget_view.js
@@ -364,21 +364,28 @@
     }.observes('parentView.data')
   }),
 
-  exportGraphData: function (event) {
-    this.set('isExportMenuHidden', true);
-    var data,
-      isCSV = !!event.context,
-      fileType = isCSV ? 'csv' : 'json',
-      fileName = 'data.' + fileType,
-      metrics = this.get('data'),
-      hasData = Em.isArray(metrics) && metrics.some(function (item) {
-        return Em.isArray(item.data);
-      });
-    if (hasData) {
-      data = isCSV ? this.prepareCSV(metrics) : JSON.stringify(metrics, this.jsonReplacer(), 4);
-      fileUtils.downloadTextFile(data, fileType, fileName);
-    } else {
-      App.showAlertPopup(Em.I18n.t('graphs.noData.title'), Em.I18n.t('graphs.noData.tooltip.title'));
+    getCustomFileName: function () {
+        // get current service name if it exists.
+        var currentServiceName = Em.isEmpty(this.get('controller.content.serviceName')) ? "" : this.get('controller.content.serviceName') + '_';
+        // serviceName_widgetName_metricName
+        return (currentServiceName + this.get('content.widgetName').replace(/\s+/g, '_')).toLowerCase();
+    },
+
+    exportGraphData: function (event) {
+        this.set('isExportMenuHidden', true);
+        var data,
+            isCSV = !!event.context,
+            fileType = isCSV ? 'csv' : 'json',
+            fileName = (Em.isEmpty(this.get('content.widgetName')) ? 'data' : this.getCustomFileName()) + '.' + fileType,
+            metrics = this.get('data'),
+            hasData = Em.isArray(metrics) && metrics.some(function (item) {
+                return Em.isArray(item.data);
+            });
+        if (hasData) {
+            data = isCSV ? this.prepareCSV(metrics) : JSON.stringify(metrics, this.jsonReplacer(), 4);
+            fileUtils.downloadTextFile(data, fileType, fileName);
+        } else {
+            App.showAlertPopup(Em.I18n.t('graphs.noData.title'), Em.I18n.t('graphs.noData.tooltip.title'));
+        }
     }
-  }
 });