Sfoglia il codice sorgente

AMBARI-10206 Draw Graph widget from the relevant retrieved widget data from the API. (atkach)

Andrii Tkach 10 anni fa
parent
commit
65fe89c963

+ 1765 - 0
ambari-web/app/assets/data/metrics/HBASE/Append_num_ops_&_Delete_num_ops.json

@@ -0,0 +1,1765 @@
+
+{
+  "href" : "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/services/HBASE/components/HBASE_REGIONSERVER?fields=metrics/hbase/regionserver/Server/Append_num_ops[1426795139,1426798739,15]",
+  "ServiceComponentInfo" : {
+    "cluster_name" : "c1",
+    "component_name" : "HBASE_REGIONSERVER",
+    "service_name" : "HBASE"
+  },
+  "metrics" : {
+    "hbase" : {
+      "regionserver" : {
+        "Server" : {
+          "Append_num_ops" : [
+            [
+              2.0,
+              1426795151
+            ],
+            [
+              0.3,
+              1426795166
+            ],
+            [
+              0.0,
+              1426795181
+            ],
+            [
+              0.0,
+              1426795196
+            ],
+            [
+              0.0,
+              1426795211
+            ],
+            [
+              0.0,
+              1426795226
+            ],
+            [
+              0.0,
+              1426795241
+            ],
+            [
+              0.0,
+              1426795256
+            ],
+            [
+              0.0,
+              1426795271
+            ],
+            [
+              0.0,
+              1426795286
+            ],
+            [
+              0.0,
+              1426795301
+            ],
+            [
+              0.0,
+              1426795316
+            ],
+            [
+              0.0,
+              1426795361
+            ],
+            [
+              0.0,
+              1426795376
+            ],
+            [
+              0.0,
+              1426795391
+            ],
+            [
+              0.0,
+              1426795406
+            ],
+            [
+              0.0,
+              1426795421
+            ],
+            [
+              0.0,
+              1426795436
+            ],
+            [
+              0.0,
+              1426795451
+            ],
+            [
+              0.0,
+              1426795481
+            ],
+            [
+              0.0,
+              1426795496
+            ],
+            [
+              0.0,
+              1426795511
+            ],
+            [
+              0.0,
+              1426795526
+            ],
+            [
+              0.0,
+              1426795541
+            ],
+            [
+              0.0,
+              1426795556
+            ],
+            [
+              0.0,
+              1426795571
+            ],
+            [
+              0.0,
+              1426795586
+            ],
+            [
+              0.0,
+              1426795601
+            ],
+            [
+              0.0,
+              1426795616
+            ],
+            [
+              0.0,
+              1426795631
+            ],
+            [
+              0.0,
+              1426795646
+            ],
+            [
+              0.0,
+              1426795661
+            ],
+            [
+              0.0,
+              1426795676
+            ],
+            [
+              0.0,
+              1426795691
+            ],
+            [
+              0.0,
+              1426795706
+            ],
+            [
+              0.0,
+              1426795721
+            ],
+            [
+              0.0,
+              1426795736
+            ],
+            [
+              0.0,
+              1426795751
+            ],
+            [
+              0.0,
+              1426795766
+            ],
+            [
+              0.0,
+              1426795781
+            ],
+            [
+              0.0,
+              1426795796
+            ],
+            [
+              0.0,
+              1426795841
+            ],
+            [
+              0.0,
+              1426795856
+            ],
+            [
+              0.0,
+              1426795871
+            ],
+            [
+              0.0,
+              1426795886
+            ],
+            [
+              0.0,
+              1426795901
+            ],
+            [
+              0.0,
+              1426795916
+            ],
+            [
+              0.0,
+              1426795931
+            ],
+            [
+              0.0,
+              1426795946
+            ],
+            [
+              0.0,
+              1426795961
+            ],
+            [
+              0.0,
+              1426795976
+            ],
+            [
+              0.0,
+              1426795991
+            ],
+            [
+              0.0,
+              1426796006
+            ],
+            [
+              0.0,
+              1426796021
+            ],
+            [
+              0.0,
+              1426796036
+            ],
+            [
+              0.0,
+              1426796051
+            ],
+            [
+              0.0,
+              1426796066
+            ],
+            [
+              0.0,
+              1426796081
+            ],
+            [
+              0.0,
+              1426796096
+            ],
+            [
+              0.0,
+              1426796111
+            ],
+            [
+              0.0,
+              1426796126
+            ],
+            [
+              0.0,
+              1426796141
+            ],
+            [
+              0.0,
+              1426796156
+            ],
+            [
+              0.0,
+              1426796201
+            ],
+            [
+              0.0,
+              1426796216
+            ],
+            [
+              0.0,
+              1426796231
+            ],
+            [
+              0.0,
+              1426796246
+            ],
+            [
+              0.0,
+              1426796261
+            ],
+            [
+              0.0,
+              1426796276
+            ],
+            [
+              0.0,
+              1426796291
+            ],
+            [
+              0.0,
+              1426796321
+            ],
+            [
+              0.0,
+              1426796336
+            ],
+            [
+              0.0,
+              1426796351
+            ],
+            [
+              0.0,
+              1426796366
+            ],
+            [
+              0.0,
+              1426796381
+            ],
+            [
+              0.0,
+              1426796396
+            ],
+            [
+              0.0,
+              1426796411
+            ],
+            [
+              0.0,
+              1426796426
+            ],
+            [
+              0.0,
+              1426796441
+            ],
+            [
+              0.0,
+              1426796456
+            ],
+            [
+              0.0,
+              1426796471
+            ],
+            [
+              0.0,
+              1426796486
+            ],
+            [
+              0.0,
+              1426796501
+            ],
+            [
+              0.0,
+              1426796516
+            ],
+            [
+              0.0,
+              1426796531
+            ],
+            [
+              0.0,
+              1426796546
+            ],
+            [
+              0.0,
+              1426796561
+            ],
+            [
+              0.0,
+              1426796576
+            ],
+            [
+              0.0,
+              1426796591
+            ],
+            [
+              0.0,
+              1426796606
+            ],
+            [
+              0.0,
+              1426796621
+            ],
+            [
+              0.0,
+              1426796636
+            ],
+            [
+              0.0,
+              1426796681
+            ],
+            [
+              0.0,
+              1426796696
+            ],
+            [
+              0.0,
+              1426796711
+            ],
+            [
+              0.0,
+              1426796726
+            ],
+            [
+              0.0,
+              1426796741
+            ],
+            [
+              0.0,
+              1426796756
+            ],
+            [
+              0.0,
+              1426796771
+            ],
+            [
+              0.0,
+              1426796786
+            ],
+            [
+              0.0,
+              1426796801
+            ],
+            [
+              0.0,
+              1426796816
+            ],
+            [
+              0.0,
+              1426796831
+            ],
+            [
+              0.0,
+              1426796846
+            ],
+            [
+              0.0,
+              1426796861
+            ],
+            [
+              0.0,
+              1426796876
+            ],
+            [
+              0.0,
+              1426796891
+            ],
+            [
+              0.0,
+              1426796906
+            ],
+            [
+              0.0,
+              1426796921
+            ],
+            [
+              0.0,
+              1426796936
+            ],
+            [
+              0.0,
+              1426796951
+            ],
+            [
+              0.0,
+              1426796966
+            ],
+            [
+              0.0,
+              1426796981
+            ],
+            [
+              0.0,
+              1426796996
+            ],
+            [
+              0.0,
+              1426797041
+            ],
+            [
+              0.0,
+              1426797056
+            ],
+            [
+              0.0,
+              1426797071
+            ],
+            [
+              0.0,
+              1426797086
+            ],
+            [
+              0.0,
+              1426797101
+            ],
+            [
+              0.0,
+              1426797116
+            ],
+            [
+              0.0,
+              1426797131
+            ],
+            [
+              0.0,
+              1426797161
+            ],
+            [
+              0.0,
+              1426797176
+            ],
+            [
+              0.0,
+              1426797191
+            ],
+            [
+              0.0,
+              1426797206
+            ],
+            [
+              0.0,
+              1426797221
+            ],
+            [
+              0.0,
+              1426797236
+            ],
+            [
+              0.0,
+              1426797251
+            ],
+            [
+              0.0,
+              1426797266
+            ],
+            [
+              0.0,
+              1426797281
+            ],
+            [
+              0.0,
+              1426797296
+            ],
+            [
+              0.0,
+              1426797311
+            ],
+            [
+              0.0,
+              1426797326
+            ],
+            [
+              0.0,
+              1426797341
+            ],
+            [
+              0.0,
+              1426797356
+            ],
+            [
+              0.0,
+              1426797371
+            ],
+            [
+              0.0,
+              1426797386
+            ],
+            [
+              0.0,
+              1426797401
+            ],
+            [
+              0.0,
+              1426797416
+            ],
+            [
+              0.0,
+              1426797431
+            ],
+            [
+              0.0,
+              1426797446
+            ],
+            [
+              0.0,
+              1426797461
+            ],
+            [
+              0.0,
+              1426797476
+            ],
+            [
+              0.0,
+              1426797521
+            ],
+            [
+              0.0,
+              1426797536
+            ],
+            [
+              0.0,
+              1426797551
+            ],
+            [
+              0.0,
+              1426797566
+            ],
+            [
+              0.0,
+              1426797581
+            ],
+            [
+              0.0,
+              1426797596
+            ],
+            [
+              0.0,
+              1426797611
+            ],
+            [
+              0.0,
+              1426797626
+            ],
+            [
+              0.0,
+              1426797641
+            ],
+            [
+              0.0,
+              1426797656
+            ],
+            [
+              0.0,
+              1426797671
+            ],
+            [
+              0.0,
+              1426797686
+            ],
+            [
+              0.0,
+              1426797701
+            ],
+            [
+              0.0,
+              1426797716
+            ],
+            [
+              0.0,
+              1426797731
+            ],
+            [
+              0.0,
+              1426797746
+            ],
+            [
+              0.0,
+              1426797761
+            ],
+            [
+              0.0,
+              1426797776
+            ],
+            [
+              0.0,
+              1426797791
+            ],
+            [
+              0.0,
+              1426797806
+            ],
+            [
+              0.0,
+              1426797821
+            ],
+            [
+              0.0,
+              1426797836
+            ],
+            [
+              0.0,
+              1426797881
+            ],
+            [
+              0.0,
+              1426797896
+            ],
+            [
+              0.0,
+              1426797911
+            ],
+            [
+              0.0,
+              1426797926
+            ],
+            [
+              0.0,
+              1426797941
+            ],
+            [
+              0.0,
+              1426797956
+            ],
+            [
+              0.0,
+              1426797971
+            ],
+            [
+              0.0,
+              1426798001
+            ],
+            [
+              0.0,
+              1426798016
+            ],
+            [
+              0.0,
+              1426798031
+            ],
+            [
+              0.0,
+              1426798046
+            ],
+            [
+              0.0,
+              1426798061
+            ],
+            [
+              0.0,
+              1426798076
+            ],
+            [
+              0.0,
+              1426798091
+            ],
+            [
+              0.0,
+              1426798106
+            ],
+            [
+              0.0,
+              1426798121
+            ],
+            [
+              0.0,
+              1426798136
+            ],
+            [
+              0.0,
+              1426798151
+            ],
+            [
+              0.0,
+              1426798166
+            ],
+            [
+              0.0,
+              1426798181
+            ],
+            [
+              0.0,
+              1426798196
+            ],
+            [
+              0.0,
+              1426798211
+            ],
+            [
+              0.0,
+              1426798226
+            ],
+            [
+              0.0,
+              1426798241
+            ],
+            [
+              0.0,
+              1426798256
+            ],
+            [
+              0.0,
+              1426798271
+            ],
+            [
+              0.0,
+              1426798286
+            ],
+            [
+              0.0,
+              1426798301
+            ],
+            [
+              0.0,
+              1426798316
+            ],
+            [
+              0.0,
+              1426798361
+            ],
+            [
+              0.0,
+              1426798376
+            ],
+            [
+              0.0,
+              1426798391
+            ],
+            [
+              0.0,
+              1426798406
+            ],
+            [
+              0.0,
+              1426798421
+            ],
+            [
+              0.0,
+              1426798436
+            ],
+            [
+              0.0,
+              1426798451
+            ],
+            [
+              0.0,
+              1426798466
+            ],
+            [
+              0.0,
+              1426798481
+            ],
+            [
+              0.0,
+              1426798496
+            ],
+            [
+              0.0,
+              1426798511
+            ],
+            [
+              0.0,
+              1426798526
+            ],
+            [
+              0.0,
+              1426798541
+            ],
+            [
+              0.0,
+              1426798556
+            ],
+            [
+              0.0,
+              1426798571
+            ],
+            [
+              0.0,
+              1426798586
+            ],
+            [
+              0.0,
+              1426798601
+            ],
+            [
+              0.0,
+              1426798616
+            ],
+            [
+              0.0,
+              1426798631
+            ],
+            [
+              0.0,
+              1426798646
+            ],
+            [
+              0.0,
+              1426798661
+            ],
+            [
+              0.0,
+              1426798676
+            ],
+            [
+              0.0,
+              1426798721
+            ],
+            [
+              0.0,
+              1426798736
+            ]
+          ],
+          "Delete_num_ops" : [
+            [
+              4.0,
+              1426795151
+            ],
+            [
+              5.0,
+              1426795166
+            ],
+            [
+              0.9,
+              1426795181
+            ],
+            [
+              0.0,
+              1426795196
+            ],
+            [
+              0.0,
+              1426795211
+            ],
+            [
+              0.0,
+              1426795226
+            ],
+            [
+              0.0,
+              1426795241
+            ],
+            [
+              0.0,
+              1426795256
+            ],
+            [
+              0.0,
+              1426795271
+            ],
+            [
+              0.0,
+              1426795286
+            ],
+            [
+              0.0,
+              1426795301
+            ],
+            [
+              0.0,
+              1426795316
+            ],
+            [
+              0.0,
+              1426795361
+            ],
+            [
+              0.0,
+              1426795376
+            ],
+            [
+              0.0,
+              1426795391
+            ],
+            [
+              0.0,
+              1426795406
+            ],
+            [
+              0.0,
+              1426795421
+            ],
+            [
+              0.0,
+              1426795436
+            ],
+            [
+              0.0,
+              1426795451
+            ],
+            [
+              0.0,
+              1426795481
+            ],
+            [
+              0.0,
+              1426795496
+            ],
+            [
+              0.0,
+              1426795511
+            ],
+            [
+              0.0,
+              1426795526
+            ],
+            [
+              0.0,
+              1426795541
+            ],
+            [
+              0.0,
+              1426795556
+            ],
+            [
+              0.0,
+              1426795571
+            ],
+            [
+              0.0,
+              1426795586
+            ],
+            [
+              0.0,
+              1426795601
+            ],
+            [
+              0.0,
+              1426795616
+            ],
+            [
+              0.0,
+              1426795631
+            ],
+            [
+              0.0,
+              1426795646
+            ],
+            [
+              0.0,
+              1426795661
+            ],
+            [
+              0.0,
+              1426795676
+            ],
+            [
+              0.0,
+              1426795691
+            ],
+            [
+              0.0,
+              1426795706
+            ],
+            [
+              0.0,
+              1426795721
+            ],
+            [
+              0.0,
+              1426795736
+            ],
+            [
+              0.0,
+              1426795751
+            ],
+            [
+              0.0,
+              1426795766
+            ],
+            [
+              0.0,
+              1426795781
+            ],
+            [
+              0.0,
+              1426795796
+            ],
+            [
+              0.0,
+              1426795841
+            ],
+            [
+              0.0,
+              1426795856
+            ],
+            [
+              0.0,
+              1426795871
+            ],
+            [
+              0.0,
+              1426795886
+            ],
+            [
+              0.0,
+              1426795901
+            ],
+            [
+              0.0,
+              1426795916
+            ],
+            [
+              0.0,
+              1426795931
+            ],
+            [
+              0.0,
+              1426795946
+            ],
+            [
+              0.0,
+              1426795961
+            ],
+            [
+              0.0,
+              1426795976
+            ],
+            [
+              0.0,
+              1426795991
+            ],
+            [
+              0.0,
+              1426796006
+            ],
+            [
+              0.0,
+              1426796021
+            ],
+            [
+              0.0,
+              1426796036
+            ],
+            [
+              0.0,
+              1426796051
+            ],
+            [
+              0.0,
+              1426796066
+            ],
+            [
+              0.0,
+              1426796081
+            ],
+            [
+              0.0,
+              1426796096
+            ],
+            [
+              0.0,
+              1426796111
+            ],
+            [
+              0.0,
+              1426796126
+            ],
+            [
+              0.0,
+              1426796141
+            ],
+            [
+              0.0,
+              1426796156
+            ],
+            [
+              0.0,
+              1426796201
+            ],
+            [
+              0.0,
+              1426796216
+            ],
+            [
+              0.0,
+              1426796231
+            ],
+            [
+              0.0,
+              1426796246
+            ],
+            [
+              0.0,
+              1426796261
+            ],
+            [
+              0.0,
+              1426796276
+            ],
+            [
+              0.0,
+              1426796291
+            ],
+            [
+              0.0,
+              1426796321
+            ],
+            [
+              0.0,
+              1426796336
+            ],
+            [
+              0.0,
+              1426796351
+            ],
+            [
+              0.0,
+              1426796366
+            ],
+            [
+              0.0,
+              1426796381
+            ],
+            [
+              0.0,
+              1426796396
+            ],
+            [
+              0.0,
+              1426796411
+            ],
+            [
+              0.0,
+              1426796426
+            ],
+            [
+              0.0,
+              1426796441
+            ],
+            [
+              0.0,
+              1426796456
+            ],
+            [
+              0.0,
+              1426796471
+            ],
+            [
+              0.0,
+              1426796486
+            ],
+            [
+              0.0,
+              1426796501
+            ],
+            [
+              0.0,
+              1426796516
+            ],
+            [
+              0.0,
+              1426796531
+            ],
+            [
+              0.0,
+              1426796546
+            ],
+            [
+              0.0,
+              1426796561
+            ],
+            [
+              0.0,
+              1426796576
+            ],
+            [
+              0.0,
+              1426796591
+            ],
+            [
+              0.0,
+              1426796606
+            ],
+            [
+              0.0,
+              1426796621
+            ],
+            [
+              0.0,
+              1426796636
+            ],
+            [
+              0.0,
+              1426796681
+            ],
+            [
+              0.0,
+              1426796696
+            ],
+            [
+              0.0,
+              1426796711
+            ],
+            [
+              0.0,
+              1426796726
+            ],
+            [
+              0.0,
+              1426796741
+            ],
+            [
+              0.0,
+              1426796756
+            ],
+            [
+              0.0,
+              1426796771
+            ],
+            [
+              0.0,
+              1426796786
+            ],
+            [
+              0.0,
+              1426796801
+            ],
+            [
+              0.0,
+              1426796816
+            ],
+            [
+              0.0,
+              1426796831
+            ],
+            [
+              0.0,
+              1426796846
+            ],
+            [
+              0.0,
+              1426796861
+            ],
+            [
+              0.0,
+              1426796876
+            ],
+            [
+              0.0,
+              1426796891
+            ],
+            [
+              0.0,
+              1426796906
+            ],
+            [
+              0.0,
+              1426796921
+            ],
+            [
+              0.0,
+              1426796936
+            ],
+            [
+              0.0,
+              1426796951
+            ],
+            [
+              0.0,
+              1426796966
+            ],
+            [
+              0.0,
+              1426796981
+            ],
+            [
+              0.0,
+              1426796996
+            ],
+            [
+              0.0,
+              1426797041
+            ],
+            [
+              0.0,
+              1426797056
+            ],
+            [
+              0.0,
+              1426797071
+            ],
+            [
+              0.0,
+              1426797086
+            ],
+            [
+              0.0,
+              1426797101
+            ],
+            [
+              0.0,
+              1426797116
+            ],
+            [
+              0.0,
+              1426797131
+            ],
+            [
+              0.0,
+              1426797161
+            ],
+            [
+              0.0,
+              1426797176
+            ],
+            [
+              0.0,
+              1426797191
+            ],
+            [
+              0.0,
+              1426797206
+            ],
+            [
+              0.0,
+              1426797221
+            ],
+            [
+              0.0,
+              1426797236
+            ],
+            [
+              0.0,
+              1426797251
+            ],
+            [
+              0.0,
+              1426797266
+            ],
+            [
+              0.0,
+              1426797281
+            ],
+            [
+              0.0,
+              1426797296
+            ],
+            [
+              0.0,
+              1426797311
+            ],
+            [
+              0.0,
+              1426797326
+            ],
+            [
+              0.0,
+              1426797341
+            ],
+            [
+              0.0,
+              1426797356
+            ],
+            [
+              0.0,
+              1426797371
+            ],
+            [
+              0.0,
+              1426797386
+            ],
+            [
+              0.0,
+              1426797401
+            ],
+            [
+              0.0,
+              1426797416
+            ],
+            [
+              0.0,
+              1426797431
+            ],
+            [
+              0.0,
+              1426797446
+            ],
+            [
+              0.0,
+              1426797461
+            ],
+            [
+              0.0,
+              1426797476
+            ],
+            [
+              0.0,
+              1426797521
+            ],
+            [
+              0.0,
+              1426797536
+            ],
+            [
+              0.0,
+              1426797551
+            ],
+            [
+              0.0,
+              1426797566
+            ],
+            [
+              0.0,
+              1426797581
+            ],
+            [
+              0.0,
+              1426797596
+            ],
+            [
+              0.0,
+              1426797611
+            ],
+            [
+              0.0,
+              1426797626
+            ],
+            [
+              0.0,
+              1426797641
+            ],
+            [
+              0.0,
+              1426797656
+            ],
+            [
+              0.0,
+              1426797671
+            ],
+            [
+              0.0,
+              1426797686
+            ],
+            [
+              0.0,
+              1426797701
+            ],
+            [
+              0.0,
+              1426797716
+            ],
+            [
+              0.0,
+              1426797731
+            ],
+            [
+              0.0,
+              1426797746
+            ],
+            [
+              0.0,
+              1426797761
+            ],
+            [
+              0.0,
+              1426797776
+            ],
+            [
+              0.0,
+              1426797791
+            ],
+            [
+              0.0,
+              1426797806
+            ],
+            [
+              0.0,
+              1426797821
+            ],
+            [
+              0.0,
+              1426797836
+            ],
+            [
+              0.0,
+              1426797881
+            ],
+            [
+              0.0,
+              1426797896
+            ],
+            [
+              0.0,
+              1426797911
+            ],
+            [
+              0.0,
+              1426797926
+            ],
+            [
+              0.0,
+              1426797941
+            ],
+            [
+              0.0,
+              1426797956
+            ],
+            [
+              0.0,
+              1426797971
+            ],
+            [
+              0.0,
+              1426798001
+            ],
+            [
+              0.0,
+              1426798016
+            ],
+            [
+              0.0,
+              1426798031
+            ],
+            [
+              0.0,
+              1426798046
+            ],
+            [
+              0.0,
+              1426798061
+            ],
+            [
+              0.0,
+              1426798076
+            ],
+            [
+              0.0,
+              1426798091
+            ],
+            [
+              0.0,
+              1426798106
+            ],
+            [
+              0.0,
+              1426798121
+            ],
+            [
+              0.0,
+              1426798136
+            ],
+            [
+              0.0,
+              1426798151
+            ],
+            [
+              0.0,
+              1426798166
+            ],
+            [
+              0.0,
+              1426798181
+            ],
+            [
+              0.0,
+              1426798196
+            ],
+            [
+              0.0,
+              1426798211
+            ],
+            [
+              0.0,
+              1426798226
+            ],
+            [
+              0.0,
+              1426798241
+            ],
+            [
+              0.0,
+              1426798256
+            ],
+            [
+              0.0,
+              1426798271
+            ],
+            [
+              0.0,
+              1426798286
+            ],
+            [
+              0.0,
+              1426798301
+            ],
+            [
+              0.0,
+              1426798316
+            ],
+            [
+              0.0,
+              1426798361
+            ],
+            [
+              0.0,
+              1426798376
+            ],
+            [
+              0.0,
+              1426798391
+            ],
+            [
+              0.0,
+              1426798406
+            ],
+            [
+              0.0,
+              1426798421
+            ],
+            [
+              0.0,
+              1426798436
+            ],
+            [
+              0.0,
+              1426798451
+            ],
+            [
+              0.0,
+              1426798466
+            ],
+            [
+              0.0,
+              1426798481
+            ],
+            [
+              0.0,
+              1426798496
+            ],
+            [
+              0.0,
+              1426798511
+            ],
+            [
+              0.0,
+              1426798526
+            ],
+            [
+              0.0,
+              1426798541
+            ],
+            [
+              0.0,
+              1426798556
+            ],
+            [
+              0.0,
+              1426798571
+            ],
+            [
+              0.0,
+              1426798586
+            ],
+            [
+              0.0,
+              1426798601
+            ],
+            [
+              0.0,
+              1426798616
+            ],
+            [
+              0.0,
+              1426798631
+            ],
+            [
+              0.0,
+              1426798646
+            ],
+            [
+              0.0,
+              1426798661
+            ],
+            [
+              0.0,
+              1426798676
+            ],
+            [
+              0.0,
+              1426798721
+            ],
+            [
+              0.0,
+              1426798736
+            ]
+          ]
+        }
+      }
+    }
+  }
+}

+ 30 - 29
ambari-web/app/assets/data/widget_layouts/HBASE/filled_user_layout.json

@@ -2,11 +2,12 @@
   "href": "http://c6401.ambari.apache.org:8080//api/v1/users/admin/widget_layouts?section_name=HBASE_SUMMARY&fields=widgetLayoutInfo/WidgetInfo/*",
   "items": [
     {
-      "layout_name": "default_hdfs_layout",
-      "section_name": "HDFS_SUMMARY",
+      "layout_name": "default_hbase_layout",
+      "section_name": "HBASE_SUMMARY",
       "cluster_name": "c1",
       "widgetLayoutInfo": [
         {
+          "widget_name": "RS_READS_WRITES",
           "WidgetInfo": {
             "widget_name": "RS_READS_WRITES",
             "display_name": "RegionServer Reads and Writes",
@@ -15,42 +16,42 @@
             "metrics": [
               {
                 "name": "regionserver.Server.Get_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Get_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Get_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Scan_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Scan_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Scan_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Append_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Append_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Append_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Delete_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Delete_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Delete_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Increment_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Increment_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Increment_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Mutate_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Mutate_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Mutate_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -59,22 +60,22 @@
             "values": [
               {
                 "name": "Read Requests",
-                "value": "`${regionserver.Server.Get_num_ops + regionserver.Server.Scan_num_ops}`"
+                "value": "${regionserver.Server.Get_num_ops + regionserver.Server.Scan_num_ops}"
               },
               {
                 "name": "Write Requests",
-                "value": "`${metrics.hbase.regionserver.Server.Append_num_ops + metrics.hbase.regionserver.Server.Delete_num_ops + metrics.hbase.regionserver.Server.Increment_num_ops + metrics.hbase.regionserver.Server.Mutate_num_ops}`"
+                "value": "${regionserver.Server.Append_num_ops + regionserver.Server.Delete_num_ops + regionserver.Server.Increment_num_ops + metrics.hbase.regionserver.Server.Mutate_num_ops}"
               }
             ],
             "properties": {
               "display_unit": "Requests",
               "graph_type": "LINE",
-              "time_ranger": "1 week"
+              "time_range": "1 week"
             }
           }
         },
         {
-          "widget_name": "RS_READS_WRITES",
+          "widget_name": "ACTIVE_HANDLER",
           "WidgetInfo": {
             "widget_name": "ACTIVE_HANDLER",
             "display_name": "Active Handlers vs Calls in General Queue",
@@ -82,14 +83,14 @@
             "metrics": [
               {
                 "name": "ipc.IPC.numOpenConnections",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "ipc.IPC.numCallsInGeneralQueue",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -98,21 +99,21 @@
             "values": [
               {
                 "name": "Active Handlers",
-                "value": "`${ipc.IPC.numActiveHandler}`"
+                "value": "${ipc.IPC.numActiveHandler}"
               },
               {
                 "name": "Calls in General Queue",
-                "value": "`${ipc.IPC.numCallsInGeneralQueue}`"
+                "value": "${ipc.IPC.numCallsInGeneralQueue}"
               }
             ],
             "properties": {
               "graph_type": "LINE",
-              "time_ranger": "1 hour"
+              "time_range": "1 hour"
             }
           }
         },
         {
-          "widget_name": "RS_READS_WRITES",
+          "widget_name": "OPEN_CONNECTIONS",
           "WidgetInfo": {
             "widget_name": "OPEN_CONNECTIONS",
             "display_name": "Open Connections",
@@ -121,7 +122,7 @@
             "metrics": [
               {
                 "name": "ipc.IPC.numOpenConnections",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -130,18 +131,18 @@
             "values": [
               {
                 "name": "Open Connections",
-                "value": "`${ipc.IPC.numOpenConnections}`"
+                "value": "${ipc.IPC.numOpenConnections}"
               }
             ],
             "properties": {
               "display_unit": "Connections",
               "graph_type": "STACK",
-              "time_ranger": "1 hour"
+              "time_range": "1 hour"
             }
           }
         },
         {
-          "widget_name": "RS_READS_WRITES",
+          "widget_name": "FILES_LOCAL",
           "WidgetInfo": {
             "widget_name": "FILES_LOCAL",
             "display_name": "Files Local",
@@ -150,7 +151,7 @@
             "metrics": [
               {
                 "name": "regionserver.Server.percentFilesLocal",
-                "ambari_id": "metrics/hbase/regionserver/percentFilesLocal",
+                "widget_id": "metrics/hbase/regionserver/percentFilesLocal",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -159,7 +160,7 @@
             "values": [
               {
                 "name": "Files Local",
-                "value": "`${regionserver.Server.percentFilesLocal}`"
+                "value": "${regionserver.Server.percentFilesLocal}"
               }
             ],
             "properties": {
@@ -168,7 +169,7 @@
           }
         },
         {
-          "widget_name": "RS_READS_WRITES",
+          "widget_name": "UPDATED_BLOCKED_TIME",
           "WidgetInfo": {
             "widget_name": "UPDATED_BLOCKED_TIME",
             "display_name": "Updated Blocked Time",
@@ -177,7 +178,7 @@
             "metrics": [
               {
                 "name": "regionserver.Server.updatesBlockedTime",
-                "ambari_id": "metrics/hbase/regionserver/Server/updatesBlockedTime",
+                "widget_id": "metrics/hbase/regionserver/Server/updatesBlockedTime",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -186,17 +187,17 @@
             "values": [
               {
                 "name": "Updated Blocked Time",
-                "value": "`${regionserver.Server.updatesBlockedTime}`"
+                "value": "${regionserver.Server.updatesBlockedTime}"
               }
             ],
             "properties": {
               "display_unit": "seconds",
               "graph_type": "LINE",
-              "time_ranger": "1 day"
+              "time_range": "1 day"
             }
           }
         }
       ]
     }
   ]
-}
+}

+ 22 - 22
ambari-web/app/assets/data/widget_layouts/HBASE/stack_layout.json

@@ -20,7 +20,7 @@
             "metrics":[
               {
                 "name": "regionserver.Server.Get_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Get_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Get_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER",
@@ -28,35 +28,35 @@
               },
               {
                 "name": "regionserver.Server.Scan_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Scan_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Scan_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Append_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Append_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Append_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Delete_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Delete_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Delete_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Increment_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Increment_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Increment_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "regionserver.Server.Mutate_num_ops",
-                "ambari_id": "metrics/hbase/regionserver/Server/Mutate_num_ops",
+                "widget_id": "metrics/hbase/regionserver/Server/Mutate_num_ops",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -65,17 +65,17 @@
             "values": [
               {
                 "name": "Read Requests",
-                "value": "`${regionserver.Server.Get_num_ops + regionserver.Server.Scan_num_ops}`"
+                "value": "${regionserver.Server.Append_num_ops}"
               },
               {
                 "name": "Write Requests",
-                "value": "`${metrics.hbase.regionserver.Server.Append_num_ops + metrics.hbase.regionserver.Server.Delete_num_ops + metrics.hbase.regionserver.Server.Increment_num_ops + metrics.hbase.regionserver.Server.Mutate_num_ops}`"
+                "value": "${regionserver.Server.Append_num_ops+regionserver.Server.Delete_num_ops}"
               }
             ],
             "properties": {
               "display_unit": "Requests",
               "graph_type": "LINE",
-              "time_ranger": "1 week"
+              "time_range": "1 week"
             }
           },
           {
@@ -86,7 +86,7 @@
             "metrics":[
               {
                 "name": "ipc.IPC.numOpenConnections",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -95,13 +95,13 @@
             "values": [
               {
                 "name": "Open Connections",
-                "value": "`${ipc.IPC.numOpenConnections}`"
+                "value": "${ipc.IPC.numOpenConnections}"
               }
             ],
             "properties": {
               "display_unit": "Connections",
               "graph_type": "STACK",
-              "time_ranger": "1 hour"
+              "time_range": "1 hour"
             }
           },
           {
@@ -111,14 +111,14 @@
             "metrics":[
               {
                 "name": "ipc.IPC.numOpenConnections",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
               },
               {
                 "name": "ipc.IPC.numCallsInGeneralQueue",
-                "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
+                "widget_id": "metrics/hbase/ipc/IPC/numOpenConnections",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -127,16 +127,16 @@
             "values": [
               {
                 "name": "Active Handlers",
-                "value": "`${ipc.IPC.numActiveHandler}`"
+                "value": "${ipc.IPC.numActiveHandler}"
               },
               {
                 "name": "Calls in General Queue",
-                "value": "`${ipc.IPC.numCallsInGeneralQueue}`"
+                "value": "${ipc.IPC.numCallsInGeneralQueue}"
               }
             ],
             "properties": {
               "graph_type": "LINE",
-              "time_ranger": "1 hour"
+              "time_range": "1 hour"
             }
           },
           {
@@ -147,7 +147,7 @@
             "metrics":[
               {
                 "name": "regionserver.Server.percentFilesLocal",
-                "ambari_id": "metrics/hbase/regionserver/percentFilesLocal",
+                "widget_id": "metrics/hbase/regionserver/percentFilesLocal",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -156,7 +156,7 @@
             "values": [
               {
                 "name": "Files Local",
-                "value": "`${regionserver.Server.percentFilesLocal}`"
+                "value": "${regionserver.Server.percentFilesLocal}"
               }
             ],
             "properties": {
@@ -171,7 +171,7 @@
             "metrics":[
               {
                 "name": "regionserver.Server.updatesBlockedTime",
-                "ambari_id": "metrics/hbase/regionserver/Server/updatesBlockedTime",
+                "widget_id": "metrics/hbase/regionserver/Server/updatesBlockedTime",
                 "category": "",
                 "service_name": "HBASE",
                 "component_name": "HBASE_REGIONSERVER"
@@ -180,13 +180,13 @@
             "values": [
               {
                 "name": "Updated Blocked Time",
-                "value": "`${regionserver.Server.updatesBlockedTime}`"
+                "value": "${regionserver.Server.updatesBlockedTime}"
               }
             ],
             "properties": {
               "display_unit": "seconds",
               "graph_type": "LINE",
-              "time_ranger": "1 day"
+              "time_range": "1 day"
             }
           }
         ]

+ 0 - 46
ambari-web/app/assets/data/widgets/service_widgets.json

@@ -1,46 +0,0 @@
-{
-  "href": "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/services/HDFS/artifacts/widget_layout",
-  "Artifacts": {
-    "artifact_name": "widget_order",
-    "service_name": "HDFS",
-    "stack_name": "HDP",
-    "stack_version": "2.2"
-  },
-  "artifact_data": {
-    "name": "HDFS",
-    "sections": [
-      {
-        "name": "HDFS_SUMMARY",
-        "widgets": [
-          {
-            "widget_name": "NAMENODE_HEAP",
-            "widget_type": "GAUGE",
-            "component_name": "NAMENODE",
-            "display_name": "NameNode Heap",
-            "time_created": 11111111,
-            "author": "me",
-            "expression": [{"template": "${jvmMemoryHeapUsed}/${jvmMemoryHeapMax}"}],
-            "properties": {
-              "warning_threshold": 0.5,
-              "error_threshold": 0.7
-            }
-          },
-          {
-            "widget_name": "HDFS_BYTES_READ",
-            "widget_type": "HEATMAP",
-            "display_name": "HDFS Bytes Read",
-            "time_created": 11111112,
-            "author": "me",
-            "description": "",
-            "component_name": "DATANODE",
-            "expression": [{"template": "${metrics.dfs.datanode.bytes_read}"}],
-            "properties": {
-              "display_unit": "MB",
-              "max_limit": "1024"
-            }
-          }
-        ]
-      }
-    ]
-  }
-}

+ 68 - 0
ambari-web/app/controllers/main/service/info/summary.js

@@ -290,6 +290,74 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
       primary: Em.I18n.t('common.close'),
       secondary: null
     });
+  },
+
+  /**
+   * @type {boolean}
+   */
+  isWidgetsLoaded: false,
+
+  /**
+   * @type Em.A
+   */
+  widgets: function() {
+    return App.Widget.find().filterProperty('serviceName', this.get('content.serviceName'));
+  }.property('isWidgetsLoaded'),
+
+  /**
+   * load widgets defined by user
+   * @returns {$.ajax}
+   */
+  loadWidgets: function () {
+    this.set('isWidgetsLoaded', false);
+    return App.ajax.send({
+      name: 'widgets.layout.userDefined.get',
+      sender: this,
+      data: {
+        loginName: App.router.get('loginName'),
+        sectionName: this.get('content.serviceName') + "_SUMMARY"
+      },
+      success: 'loadWidgetsSuccessCallback'
+    });
+  },
+
+  /**
+   * success callback of <code>loadWidgets()</code>
+   * @param {object|null} data
+   */
+  loadWidgetsSuccessCallback: function (data) {
+    if (data.items[0]) {
+      App.widgetMapper.map(data.items[0], this.get('content.serviceName'));
+      this.set('isWidgetsLoaded', true);
+    } else {
+      this.loadStackWidgetsLayout();
+    }
+  },
+
+  /**
+   * load widgets defined by stack
+   * @returns {$.ajax}
+   */
+  loadStackWidgetsLayout: function () {
+    return App.ajax.send({
+      name: 'widgets.layout.stackDefined.get',
+      sender: this,
+      data: {
+        stackVersionURL: App.get('stackVersionURL'),
+        serviceName: this.get('content.serviceName')
+      },
+      success: 'loadStackWidgetsLayoutSuccessCallback',
+      error: 'loadStackWidgetsLayoutErrorCallback'
+    });
+  },
+
+  /**
+   * success callback of <code>loadStackWidgetsLayout()</code>
+   * @param {object|null} data
+   */
+  loadStackWidgetsLayoutSuccessCallback: function (data) {
+    App.widgetMapper.map(data.artifact_data.layouts.findProperty('section_name', (this.get('content.serviceName') + "_SUMMARY")), this.get('content.serviceName'));
+    this.set('isWidgetsLoaded', true);
   }
 
 });

+ 1 - 55
ambari-web/app/controllers/main/service/item.js

@@ -767,59 +767,5 @@ App.MainServiceItemController = Em.Controller.extend({
     console.warn('Error during executing custom command');
   },
 
-  isPending:true,
-
-  /**
-   * load widgets defined by user
-   * @returns {$.ajax}
-   */
-  loadWidgets: function () {
-    return App.ajax.send({
-      name: 'widgets.layout.userDefined.get',
-      sender: this,
-      data: {
-        loginName: App.router.get('loginName'),
-        sectionName: this.get('content.serviceName') + "_SUMMARY"
-      },
-      success: 'loadWidgetsSuccessCallback'
-    });
-  },
-
-  /**
-   * success callback of <code>loadWidgets()</code>
-   * @param {object|null} data
-   */
-  loadWidgetsSuccessCallback: function (data) {
-    if (data.items[0]) {
-      App.widgetMapper.map(data.items[0]);
-    } else {
-      this.loadStackWidgetsLayout();
-    }
-  },
-
-  /**
-   * load widgets defined by stack
-   * @returns {$.ajax}
-   */
-  loadStackWidgetsLayout: function () {
-    return App.ajax.send({
-      name: 'widgets.layout.stackDefined.get',
-      sender: this,
-      data: {
-        stackVersionURL: App.get('stackVersionURL'),
-        serviceName: this.get('content.serviceName')
-      },
-      success: 'loadStackWidgetsLayoutSuccessCallback',
-      error: 'loadStackWidgetsLayoutErrorCallback'
-    });
-  },
-
-  /**
-   * success callback of <code>loadStackWidgetsLayout()</code>
-   * @param {object|null} data
-   */
-  loadStackWidgetsLayoutSuccessCallback: function (data) {
-    App.widgetMapper.map(data.artifact_data.layouts.findProperty('section_name', (this.get('content.serviceName') + "_SUMMARY")));
-  }
-
+  isPending:true
 });

+ 2 - 2
ambari-web/app/mappers/widget_mapper.js

@@ -35,12 +35,12 @@ App.widgetMapper = App.QuickDataMapper.create({
     values: 'values',
     description: 'description'
   },
-  map: function (json) {
+  map: function (json, serviceName) {
+    //TODO add service name to user layout API response
     if (!this.get('model')) return;
 
     if (json) {
       var result = [];
-      var serviceName = '';//TODO assign when API structure approved
 
       var sectionName = json.section_name;
       json.widgetLayoutInfo.forEach(function (item, index) {

+ 33 - 2
ambari-web/app/models/widget.js

@@ -20,7 +20,17 @@ var App = require('app');
 
 App.Widget = DS.Model.extend({
   widgetName: DS.attr('string'),
-  defaultOrder: "", // This field is not derived from API but needs to be filled in the mapper on the client side
+
+  /**
+   * types:
+   *  - GAUGE (shown as a percentage dial)
+   *  - HEATMAP
+   *  - GRAPH (Line graph and stack graph)
+   *  - NUMBER (e.g., “1 ms” for RPC latency)
+   *  - x / y (e.g., “2 / 3” DataNodes live)
+   *  - LINKS
+   *  - TEMPLATE
+   */
   widgetType: DS.attr('string'),
   displayName: DS.attr('string'),
   serviceName: DS.attr('string'),
@@ -29,7 +39,28 @@ App.Widget = DS.Model.extend({
   sectionName: DS.attr('string'),
   author: DS.attr('string'),
   properties: DS.attr('object'),
-  expression: DS.attr('array')
+  expression: DS.attr('array'),
+  metrics: DS.attr('array'),
+  values: DS.attr('array'),
+
+  /**
+   * @type {number}
+   * @default 0
+   */
+  defaultOrder: 0, // This field is not derived from API but needs to be filled in the mapper on the client side
+
+  /**
+   * @type Em.View
+   * @class
+   */
+  viewClass: function () {
+    switch (this.get('widgetType')) {
+      case 'GRAPH':
+        return App.GraphWidgetView;
+      default:
+        return Em.View;
+    }
+  }.property('widgetType')
 });
 
 

+ 1 - 1
ambari-web/app/models/widget_layout.js

@@ -25,4 +25,4 @@ App.WidgetLayout = DS.Model.extend({
 });
 
 
-App.Widget.FIXTURES = [];
+App.WidgetLayout.FIXTURES = [];

+ 9 - 0
ambari-web/app/templates/main/service/info/summary.hbs

@@ -98,6 +98,15 @@
           </div>
           <div class="">
             <table class="graphs">
+              {{#if App.supports.customizedWidgets}}
+                <tr>
+                  {{#each widget in controller.widgets}}
+                    <td>
+                      {{view widget.viewClass contentBinding="widget"}}
+                    </td>
+                  {{/each}}
+                </tr>
+              {{/if}}
               {{#each graphs in view.serviceMetricGraphs}}
                 <tr>
                   {{#each graph in graphs}}

+ 10 - 0
ambari-web/app/utils/ajax/ajax.js

@@ -2411,6 +2411,16 @@ var urls = {
   'widgets.layout.userDefined.get': {
     real: '/users/{loginName}/widget_layouts?section_name={sectionName}',
     mock: '/data/widget_layouts/HBASE/empty_user_layout.json'
+  },
+
+  'widgets.serviceComponent.metrics.get': {
+    real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?fields={widgetIds}',
+    mock: '/data/metrics/{serviceName}/Append_num_ops_&_Delete_num_ops.json'
+  },
+
+  'widgets.hostComponent.metrics.get': {
+    real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?{hostComponentCriteria}&fields={widgetIds}',
+    mock: '/data/metrics/{serviceName}/Append_num_ops.json'
   }
 };
 /**

+ 1 - 0
ambari-web/app/views.js

@@ -61,6 +61,7 @@ require('views/common/filter_combo_cleanable');
 require('views/common/table_view');
 require('views/common/progress_bar_view');
 require('views/common/controls_view');
+require('views/common/widget/graph_widget_view');
 require('views/login');
 require('views/main');
 require('views/main/menu');

+ 326 - 0
ambari-web/app/views/common/widget/graph_widget_view.js

@@ -0,0 +1,326 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.GraphWidgetView = App.ChartLinearTimeView.extend({
+
+  /**
+   * @type {string}
+   */
+  id: function () {
+    return this.get('content.id');
+  }.property('content.id'),
+
+  /**
+   * @type {string}
+   */
+  title: function () {
+    return this.get('content.displayName');
+  }.property('content.displayName'),
+
+  /**
+   * @type {string}
+   */
+  renderer: function () {
+    return this.get('properties.graph_type') === 'STACK' ? 'area' : 'line';
+  }.property('properties.graph_type'),
+
+  /**
+   * @type {RegExp}
+   * @const
+   */
+  EXPRESSION_REGEX: /\$\{([\w\.\+\-\*\/\(\)]*)\}/g,
+
+  /**
+   * @type {RegExp}
+   * @const
+   */
+  MATH_EXPRESSION_REGEX: /^[\d\+\-\*\/\(\)\.]+$/,
+
+  /**
+   * @type {RegExp}
+   * @const
+   */
+  VALUE_NAME_REGEX: /[\w\.]+/g,
+
+  /**
+   * value in ms
+   * @type {number}
+   */
+  timeRange: 3600,
+
+  /**
+   * value in ms
+   * @type {number}
+   */
+  timeStep: 15,
+
+  /**
+   * common metrics container
+   * @type {Array}
+   */
+  metrics: [],
+
+  /**
+   * @type {boolean}
+   */
+  isLoaded: false,
+
+  /**
+   * @type {App.Widget}
+   * @default null
+   */
+  content: null,
+
+  /**
+   * load metrics
+   */
+  beforeRender: function () {
+    var requestData = this.getRequestData(this.get('content.metrics')),
+      request,
+      requestCounter = 0,
+      self = this;
+
+    for (var i in requestData) {
+      request = requestData[i];
+      requestCounter++;
+      if (request.host_component_criteria) {
+        this.getHostComponentMetrics(request).complete(function () {
+          requestCounter--;
+          if (requestCounter === 0) self.set('isLoaded', true);
+        });
+      } else {
+        this.getServiceComponentMetrics(request).complete(function () {
+          requestCounter--;
+          if (requestCounter === 0) self.set('isLoaded', true);
+        });
+      }
+    }
+  },
+
+  didInsertElement: Em.K,
+
+  transformToSeries: function (seriesData) {
+    return seriesData;
+  },
+
+  drawWidget: function () {
+    if (this.get('isLoaded')) {
+      this._refreshGraph(this.calculateSeries())
+    }
+  }.observes('isLoaded'),
+
+  /**
+   * calculate series datasets for graph widgets
+   */
+  calculateSeries: function () {
+    var metrics = this.get('metrics');
+    var widgetType = this.get('content.widgetType');
+    var seriesData = [];
+
+    this.get('content.values').forEach(function (value) {
+      var computedExpressions = this.computeExpression(this.extractExpressions(value)[0], metrics);
+      seriesData.push(this.transformData(computedExpressions[value.value.match(this.get('EXPRESSION_REGEX'))[0]], value.name));
+    }, this);
+
+    return seriesData;
+  },
+
+  /**
+   * compute expression
+   *
+   * @param {string} expression
+   * @param {object} metrics
+   * @returns {object}
+   */
+  computeExpression: function (expression, metrics) {
+    var validExpression = true,
+      value = [],
+      dataLinks = {},
+      dataLength = 0,
+      beforeCompute,
+      result = {};
+
+    //replace values with metrics data
+    expression.match(this.get('VALUE_NAME_REGEX')).forEach(function (match) {
+      if (metrics.someProperty('name', match)) {
+        dataLinks[match] = metrics.findProperty('name', match).data;
+        dataLength = metrics.findProperty('name', match).data.length;
+      } else {
+        validExpression = false;
+        console.warn('Metrics not found to compute expression');
+      }
+    });
+
+    if (validExpression) {
+      for (var i = 0, timestamp; i < dataLength; i++) {
+        beforeCompute = expression.replace(this.get('VALUE_NAME_REGEX'), function (match) {
+          timestamp = dataLinks[match][i][1];
+          return dataLinks[match][i][0];
+        });
+        value.push([Number(window.eval(beforeCompute)), timestamp]);
+      }
+    }
+
+    result['${' + expression + '}'] = value;
+    return result;
+  },
+
+  /**
+   * TODO should be used for simple type of widgets
+   * @param expressions
+   * @param metrics
+   * @returns {object}
+   *//*
+   computeExpressions: function (expressions, metrics) {
+   var result = {};
+
+   expressions.forEach(function (_expression) {
+   var validExpression = true;
+   var value = "";
+
+   //replace values with metrics data
+   var beforeCompute = _expression.replace(this.get('VALUE_NAME_REGEX'), function (match) {
+   if (metrics.someProperty('name', match)) {
+   return metrics.findProperty('name', match).data;
+   } else {
+   validExpression = false;
+   console.warn('Metrics not found to compute expression');
+   }
+   });
+
+   if (validExpression) {
+   //check for correct math expression
+   validExpression = this.get('MATH_EXPRESSION_REGEX').test(beforeCompute);
+   !validExpression && console.warn('Value is not correct mathematical expression');
+   }
+
+   result['${' + _expression + '}'] = (validExpression) ? Number(window.eval(beforeCompute)).toString() : value;
+   }, this);
+   return result;
+   },*/
+
+  /**
+   * extract expressions
+   * @param {object} value
+   * @returns {Array}
+   */
+  extractExpressions: function (value) {
+    var pattern = this.get('EXPRESSION_REGEX'),
+      expressions = [],
+      match;
+
+    while (match = pattern.exec(value.value)) {
+      expressions.push(match[1]);
+    }
+    return expressions;
+  },
+
+  /**
+   * make GET call to server in order to fetch service-component metrics
+   * @param {object} request
+   * @returns {$.ajax}
+   */
+  getServiceComponentMetrics: function (request) {
+    return App.ajax.send({
+      name: 'widgets.serviceComponent.metrics.get',
+      sender: this,
+      data: {
+        serviceName: request.service_name,
+        componentName: request.component_name,
+        widgetIds: this.addTimeProperties(request.widget_ids).join(',')
+      },
+      success: 'getServiceComponentMetricsSuccessCallback'
+    });
+  },
+
+  getServiceComponentMetricsSuccessCallback: function (data, opt, params) {
+    var metrics = [];
+    var metricsData = data.metrics[params.serviceName.toLowerCase()];
+
+    this.get('content.metrics').forEach(function (_metric) {
+      if (Em.get(metricsData, _metric.name)) {
+        _metric.data = Em.get(metricsData, _metric.name);
+        this.get('metrics').pushObject(_metric);
+      }
+    }, this);
+  },
+
+  /**
+   * make GET call to server in order to fetch host-component metrics
+   * @param {object} request
+   * @returns {$.ajax}
+   */
+  getHostComponentMetrics: function (request) {
+    return App.ajax.send({
+      name: 'widgets.hostComponent.metrics.get',
+      sender: this,
+      data: {
+        serviceName: request.service_name,
+        componentName: request.component_name,
+        widgetIds: this.addTimeProperties(request.widget_ids).join(','),
+        hostComponentCriteria: 'host_components/HostRoles/' + request.host_component_criteria
+      },
+      success: 'getHostComponentMetricsSuccessCallback'
+    });
+  },
+
+  getHostComponentMetricsSuccessCallback: function () {
+    //TODO push data to metrics after response structure approved
+  },
+
+  /**
+   * get data formatted for request
+   * @param {Array} metrics
+   */
+  getRequestData: function (metrics) {
+    var requestsData = {};
+
+    metrics.forEach(function (metric) {
+      var key = metric.service_name + '_' + metric.component_name + '_' + metric.host_component_criteria;
+
+      if (requestsData[key]) {
+        requestsData[key]["widget_ids"].push(metric["widget_id"]);
+      } else {
+        metric["widget_ids"] = [metric["widget_id"]];
+        delete metric["widget_id"];
+        requestsData[key] = metric;
+      }
+    }, this);
+    return requestsData;
+  },
+
+  /**
+   * add time properties
+   * @param {Array} widgetIds
+   * @returns {Array} result
+   */
+  addTimeProperties: function (widgetIds) {
+    var startDate = App.dateTime();
+    var endDate = startDate + this.get('timeRange');
+    var step = this.get('timeStep');
+    var result = [];
+
+    widgetIds.forEach(function (ambariId) {
+      result.push(ambariId + '[' + startDate + ',' + endDate + ',' + step + ']');
+    }, this);
+
+    return result;
+  }
+});

+ 9 - 0
ambari-web/app/views/main/service/info/summary.js

@@ -472,6 +472,15 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
   didInsertElement: function () {
     var svcName = this.get('service.serviceName');
     var isMetricsSupported = svcName != 'STORM' || App.get('isStormMetricsSupported');
+
+    if (App.get('supports.customizedWidgets')) {
+      var serviceName = this.get('controller.content.serviceName');
+      var stackService = App.StackService.find().findProperty('serviceName', serviceName);
+      if (stackService.get('isServiceWithWidgets')) {
+        this.get('controller').loadWidgets();
+      }
+    }
+
     if (svcName && isMetricsSupported) {
       this.constructGraphObjects(App.service_graph_config[svcName.toLowerCase()]);
     }

+ 0 - 7
ambari-web/app/views/main/service/item.js

@@ -234,13 +234,6 @@ App.MainServiceItemView = Em.View.extend({
 
   didInsertElement: function () {
     this.get('controller').setStartStopState();
-    if (App.get('supports.customizedWidgets')) {
-      var serviceName = this.get('controller.content.serviceName');
-      var stackService = App.StackService.find().findProperty('serviceName', serviceName);
-      if (stackService.get('isServiceWithWidgets')) {
-        this.get('controller').loadWidgets();
-      }
-    }
   },
 
   willInsertElement: function () {

+ 73 - 0
ambari-web/test/controllers/main/service/info/summary_test.js

@@ -227,4 +227,77 @@ describe('App.MainServiceInfoSummaryController', function () {
 
   });
 
+  describe("#loadWidgets()", function () {
+    before(function () {
+      controller = App.MainServiceInfoSummaryController.create();
+      sinon.stub(App.ajax, 'send');
+    });
+    after(function () {
+      App.ajax.send.restore();
+    });
+    it("make GET call", function () {
+      controller.loadWidgets();
+      expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.userDefined.get');
+    });
+  });
+
+  describe("#loadWidgetsSuccessCallback()", function () {
+    beforeEach(function () {
+      controller = App.MainServiceInfoSummaryController.create();
+      sinon.stub(App.widgetMapper, 'map');
+      sinon.stub(controller, 'loadStackWidgetsLayout');
+    });
+    afterEach(function () {
+      App.widgetMapper.map.restore();
+      controller.loadStackWidgetsLayout.restore();
+    });
+    it("empty data", function () {
+      controller.loadWidgetsSuccessCallback({items: []});
+      expect(controller.loadStackWidgetsLayout.calledOnce).to.be.true;
+    });
+    it("filled data", function () {
+      controller.loadWidgetsSuccessCallback({items: ['1']});
+      expect(App.widgetMapper.map.calledWith('1')).to.be.true;
+    });
+  });
+
+  describe("#loadStackWidgetsLayout()", function () {
+    before(function () {
+      controller = App.MainServiceInfoSummaryController.create();
+      sinon.stub(App.ajax, 'send');
+    });
+    after(function () {
+      App.ajax.send.restore();
+    });
+    it("make GET call", function () {
+      controller.loadStackWidgetsLayout();
+      expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.stackDefined.get');
+    });
+  });
+
+  describe("#loadStackWidgetsLayoutSuccessCallback()", function () {
+    before(function () {
+      controller = App.MainServiceInfoSummaryController.create();
+      sinon.stub(App.widgetMapper, 'map');
+    });
+    after(function () {
+      App.widgetMapper.map.restore();
+    });
+    it("make GET call", function () {
+      var data = {
+        artifact_data: {
+          layouts: [
+            {
+              section_name: 'S1_SUMMARY'
+            }
+          ]
+        }
+      };
+      controller.set('content', Em.Object.create({serviceName: 'S1'}));
+      controller.loadStackWidgetsLayoutSuccessCallback(data);
+      expect(App.widgetMapper.map.calledWith({
+        section_name: 'S1_SUMMARY'
+      })).to.be.true;
+    });
+  });
 });

+ 0 - 75
ambari-web/test/controllers/main/service/item_test.js

@@ -757,79 +757,4 @@ describe('App.MainServiceItemController', function () {
       expect(App.showConfirmationPopup.calledOnce).to.equal(true);
     });
   });
-
-  describe("#loadWidgets()", function () {
-    var mainServiceItemController = App.MainServiceItemController.create();
-    before(function () {
-      sinon.stub(App.ajax, 'send');
-    });
-    after(function () {
-      App.ajax.send.restore();
-    });
-    it("make GET call", function () {
-      mainServiceItemController.loadWidgets();
-      expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.userDefined.get');
-    });
-  });
-
-  describe("#loadWidgetsSuccessCallback()", function () {
-    var mainServiceItemController = App.MainServiceItemController.create();
-    before(function () {
-      sinon.stub(App.widgetMapper, 'map');
-      sinon.stub(mainServiceItemController, 'loadStackWidgetsLayout');
-    });
-    after(function () {
-      App.widgetMapper.map.restore();
-      mainServiceItemController.loadStackWidgetsLayout.restore();
-    });
-    it("empty data", function () {
-      mainServiceItemController.loadWidgetsSuccessCallback({items: []});
-      expect(mainServiceItemController.loadStackWidgetsLayout.calledOnce).to.be.true;
-    });
-    it("filled data", function () {
-      mainServiceItemController.loadWidgetsSuccessCallback({items: ['1']});
-      expect(App.widgetMapper.map.calledWith('1')).to.be.true;
-    });
-  });
-
-  describe("#loadStackWidgetsLayout()", function () {
-    var mainServiceItemController = App.MainServiceItemController.create();
-    before(function () {
-      sinon.stub(App.ajax, 'send');
-    });
-    after(function () {
-      App.ajax.send.restore();
-    });
-    it("make GET call", function () {
-      mainServiceItemController.loadStackWidgetsLayout();
-      expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.stackDefined.get');
-    });
-  });
-
-  describe("#loadStackWidgetsLayoutSuccessCallback()", function () {
-    var mainServiceItemController = App.MainServiceItemController.create({
-      content: Em.Object.create({serviceName: 'S1'})
-    });
-    before(function () {
-      sinon.stub(App.widgetMapper, 'map');
-    });
-    after(function () {
-      App.widgetMapper.map.restore();
-    });
-    it("make GET call", function () {
-      var data = {
-        artifact_data: {
-          layouts: [
-            {
-              section_name: 'S1_SUMMARY'
-            }
-          ]
-        }
-      };
-      mainServiceItemController.loadStackWidgetsLayoutSuccessCallback(data);
-      expect(App.widgetMapper.map.calledWith({
-        section_name: 'S1_SUMMARY'
-      })).to.be.true;
-    });
-  });
 });