summaryrefslogtreecommitdiff
path: root/ambari-web
diff options
context:
space:
mode:
authorYusaku Sako <yusaku@apache.org>2012-12-09 13:22:27 +0000
committerYusaku Sako <yusaku@apache.org>2012-12-09 13:22:27 +0000
commit33ec01f1701f3095a96e2cdc875fc2efb6bd8b9b (patch)
tree2c034d047ede9d84a71c29dd2bb5f80aa00d7ff1 /ambari-web
parent98f77e2a5770d6a3b7e29add893c0c982348eafe (diff)
AMBARI-1059. Refactor cluster management. (yusaku)
git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1418938 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'ambari-web')
-rw-r--r--ambari-web/app/assets/data/apps/jobs.json736
-rw-r--r--ambari-web/app/assets/data/apps/runs.json18
-rw-r--r--ambari-web/app/assets/data/clusters/info.json4
-rw-r--r--ambari-web/app/assets/data/users/users.json8
-rw-r--r--ambari-web/app/controllers/global/cluster_controller.js152
-rw-r--r--ambari-web/app/controllers/installer.js69
-rw-r--r--ambari-web/app/controllers/main.js2
-rw-r--r--ambari-web/app/controllers/main/admin/user.js47
-rw-r--r--ambari-web/app/controllers/main/apps/runs_controller.js0
-rw-r--r--ambari-web/app/controllers/main/dashboard.js4
-rw-r--r--ambari-web/app/controllers/main/host/add_controller.js52
-rw-r--r--ambari-web/app/controllers/main/service/add_controller.js251
-rw-r--r--ambari-web/app/controllers/wizard/step5_controller.js2
-rw-r--r--ambari-web/app/controllers/wizard/step6_controller.js38
-rw-r--r--ambari-web/app/controllers/wizard/step7_controller.js3
-rw-r--r--ambari-web/app/controllers/wizard/step8_controller.js49
-rw-r--r--ambari-web/app/controllers/wizard/step9_controller.js30
-rw-r--r--ambari-web/app/data/config_mapping.js13
-rw-r--r--ambari-web/app/mappers/hosts_mapper.js6
-rw-r--r--ambari-web/app/mappers/runs_mapper.js4
-rw-r--r--ambari-web/app/mappers/server_data_mapper.js2
-rw-r--r--ambari-web/app/mappers/services_mapper.js77
-rw-r--r--ambari-web/app/mappers/users_mapper.js4
-rw-r--r--ambari-web/app/messages.js594
-rw-r--r--ambari-web/app/models/form.js122
-rw-r--r--ambari-web/app/models/host.js10
-rw-r--r--ambari-web/app/models/run.js17
-rw-r--r--ambari-web/app/models/service/mapreduce.js3
-rw-r--r--ambari-web/app/models/user.js87
-rw-r--r--ambari-web/app/router.js30
-rw-r--r--ambari-web/app/routes/add_host_routes.js1
-rw-r--r--ambari-web/app/routes/add_service_routes.js15
-rw-r--r--ambari-web/app/routes/installer.js5
-rw-r--r--ambari-web/app/routes/main.js1
-rw-r--r--ambari-web/app/styles/application.less29
-rw-r--r--ambari-web/app/styles/apps.less46
-rw-r--r--ambari-web/app/templates/main/admin/user.hbs7
-rw-r--r--ambari-web/app/templates/main/admin/user/edit.hbs2
-rw-r--r--ambari-web/app/templates/main/admin/user/row.hbs1
-rw-r--r--ambari-web/app/templates/main/apps.hbs20
-rw-r--r--ambari-web/app/templates/main/apps/list_row.hbs2
-rw-r--r--ambari-web/app/templates/main/dashboard.hbs9
-rw-r--r--ambari-web/app/templates/main/dashboard/service/hbase.hbs2
-rw-r--r--ambari-web/app/templates/main/dashboard/service/hdfs.hbs2
-rw-r--r--ambari-web/app/templates/main/dashboard/service/mapreduce.hbs5
-rw-r--r--ambari-web/app/templates/main/host.hbs2
-rw-r--r--ambari-web/app/templates/main/host/summary.hbs22
-rw-r--r--ambari-web/app/templates/main/service/menu_item.hbs6
-rw-r--r--ambari-web/app/templates/wizard/step5.hbs1
-rw-r--r--ambari-web/app/templates/wizard/step6.hbs2
-rw-r--r--ambari-web/app/utils/data_table.js3
-rw-r--r--ambari-web/app/utils/date.js2
-rw-r--r--ambari-web/app/utils/db.js259
-rw-r--r--ambari-web/app/views/main/admin/menu.js4
-rw-r--r--ambari-web/app/views/main/admin/user/edit.js10
-rw-r--r--ambari-web/app/views/main/apps/item/dag_view.js8
-rw-r--r--ambari-web/app/views/main/apps_view.js115
-rw-r--r--ambari-web/app/views/main/dashboard.js39
-rw-r--r--ambari-web/app/views/main/dashboard/service.js18
-rw-r--r--ambari-web/app/views/main/dashboard/service/hdfs.js18
-rw-r--r--ambari-web/app/views/main/dashboard/service/mapreduce.js28
-rw-r--r--ambari-web/app/views/main/host/summary.js6
-rw-r--r--ambari-web/app/views/main/service/menu.js12
-rw-r--r--ambari-web/app/views/wizard/step5_view.js1
-rw-r--r--ambari-web/app/views/wizard/step9_view.js22
-rw-r--r--ambari-web/package.json3
-rw-r--r--ambari-web/pom.xml2
67 files changed, 1989 insertions, 1175 deletions
diff --git a/ambari-web/app/assets/data/apps/jobs.json b/ambari-web/app/assets/data/apps/jobs.json
index 90e49d3779..cad352607d 100644
--- a/ambari-web/app/assets/data/apps/jobs.json
+++ b/ambari-web/app/assets/data/apps/jobs.json
@@ -12,7 +12,7 @@
"submitTime": 1352095518432,
"userName": "root",
"workflowEntityName": "89",
- "workflowId": "pig_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
+ "workflowId": "mr_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0037/job.xml",
@@ -27,7 +27,7 @@
"submitTime": 1352095842817,
"userName": "root",
"workflowEntityName": "97",
- "workflowId": "pig_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
+ "workflowId": "mr_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0038/job.xml",
@@ -42,7 +42,7 @@
"submitTime": 1352096111311,
"userName": "root",
"workflowEntityName": "103",
- "workflowId": "pig_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
+ "workflowId": "mr_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0019/job.xml",
@@ -57,7 +57,7 @@
"submitTime": 1352016495104,
"userName": "root",
"workflowEntityName": "86",
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174"
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0016/job.xml",
@@ -72,7 +72,7 @@
"submitTime": 1352015770967,
"userName": "root",
"workflowEntityName": "72",
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174"
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0017/job.xml",
@@ -87,7 +87,7 @@
"submitTime": 1352016076858,
"userName": "root",
"workflowEntityName": "80",
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174"
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0020/job.xml",
@@ -102,7 +102,7 @@
"submitTime": 1352016582226,
"userName": "root",
"workflowEntityName": "103",
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174"
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0018/job.xml",
@@ -117,7 +117,7 @@
"submitTime": 1352016352319,
"userName": "root",
"workflowEntityName": "83",
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174"
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174"
},
{
"confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0001/job.xml",
@@ -193,6 +193,726 @@
"userName": "root",
"workflowEntityName": "86",
"workflowId": "pig_5750f4cf-f0d2-4e3d-a7ce-90912b309c12"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0004/job.xml",
+ "elapsedTime": 69662,
+ "inputBytes": 650899,
+ "jobId": "job_201211031645_0004",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351987177998,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0001/job.xml",
+ "elapsedTime": 290358,
+ "inputBytes": 10409082,
+ "jobId": "job_201211031645_0001",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351986424338,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0002/job.xml",
+ "elapsedTime": 284645,
+ "inputBytes": 57690218,
+ "jobId": "job_201211031645_0002",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351986732629,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0005/job.xml",
+ "elapsedTime": 78285,
+ "inputBytes": 650899,
+ "jobId": "job_201211031645_0005",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351987266512,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0003/job.xml",
+ "elapsedTime": 125236,
+ "inputBytes": 27260386,
+ "jobId": "job_201211031645_0003",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351987036961,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0042/job.xml",
+ "elapsedTime": 297229,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0042",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 59144990,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352096970440,
+ "userName": "root",
+ "workflowEntityName": "89",
+ "workflowId": "hive_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0043/job.xml",
+ "elapsedTime": 261896,
+ "inputBytes": 59145376,
+ "jobId": "job_201211040003_0043",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352097283746,
+ "userName": "root",
+ "workflowEntityName": "97",
+ "workflowId": "hive_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0044/job.xml",
+ "elapsedTime": 98157,
+ "inputBytes": 54520772,
+ "jobId": "job_201211040003_0044",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 2,
+ "outputBytes": 67032,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352097559896,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "hive_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0013/job.xml",
+ "elapsedTime": 127841,
+ "inputBytes": 27260385,
+ "jobId": "job_201211040003_0013",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352015380624,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0011/job.xml",
+ "elapsedTime": 288027,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0011",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352014799808,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0014/job.xml",
+ "elapsedTime": 71726,
+ "inputBytes": 650898,
+ "jobId": "job_201211040003_0014",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352015527755,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0012/job.xml",
+ "elapsedTime": 258791,
+ "inputBytes": 57690216,
+ "jobId": "job_201211040003_0012",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352015103545,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0015/job.xml",
+ "elapsedTime": 85496,
+ "inputBytes": 650898,
+ "jobId": "job_201211040003_0015",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352015619635,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0007/job.xml",
+ "elapsedTime": 258086,
+ "inputBytes": 59145375,
+ "jobId": "job_201211031645_0007",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351988355833,
+ "userName": "root",
+ "workflowEntityName": "97",
+ "workflowId": "hive_c832f923-9bd4-421f-9a51-8f45991d91de"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0008/job.xml",
+ "elapsedTime": 100544,
+ "inputBytes": 54520768,
+ "jobId": "job_201211031645_0008",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 2,
+ "outputBytes": 67032,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351988633975,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "hive_c832f923-9bd4-421f-9a51-8f45991d91de"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211031645_0006/job.xml",
+ "elapsedTime": 288318,
+ "inputBytes": 10409082,
+ "jobId": "job_201211031645_0006",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 59144990,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1351988051564,
+ "userName": "root",
+ "workflowEntityName": "89",
+ "workflowId": "hive_c832f923-9bd4-421f-9a51-8f45991d91de"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0031/job.xml",
+ "elapsedTime": 283919,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0031",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352048063698,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0032/job.xml",
+ "elapsedTime": 258747,
+ "inputBytes": 57690215,
+ "jobId": "job_201211040003_0032",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352048366586,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0034/job.xml",
+ "elapsedTime": 69660,
+ "inputBytes": 650896,
+ "jobId": "job_201211040003_0034",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352048785330,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0033/job.xml",
+ "elapsedTime": 126054,
+ "inputBytes": 27260383,
+ "jobId": "job_201211040003_0033",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352048644829,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0035/job.xml",
+ "elapsedTime": 34344228,
+ "inputBytes": 650896,
+ "jobId": "job_201211040003_0035",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352048870389,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0030/job.xml",
+ "elapsedTime": 85287,
+ "inputBytes": 650899,
+ "jobId": "job_201211040003_0030",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352047891916,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0026/job.xml",
+ "elapsedTime": 278027,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0026",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352047088454,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0029/job.xml",
+ "elapsedTime": 70231,
+ "inputBytes": 650899,
+ "jobId": "job_201211040003_0029",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352047805764,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0028/job.xml",
+ "elapsedTime": 128030,
+ "inputBytes": 27260385,
+ "jobId": "job_201211040003_0028",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352047658396,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0027/job.xml",
+ "elapsedTime": 254520,
+ "inputBytes": 57690215,
+ "jobId": "job_201211040003_0027",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352047385662,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0008/job.xml",
+ "elapsedTime": 127541,
+ "inputBytes": 27260385,
+ "jobId": "job_201211040003_0008",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352014420900,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0007/job.xml",
+ "elapsedTime": 259085,
+ "inputBytes": 57690217,
+ "jobId": "job_201211040003_0007",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352014141981,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0006/job.xml",
+ "elapsedTime": 288241,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0006",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352013831863,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0009/job.xml",
+ "elapsedTime": 71166,
+ "inputBytes": 650898,
+ "jobId": "job_201211040003_0009",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352014563951,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0010/job.xml",
+ "elapsedTime": 83733,
+ "inputBytes": 650898,
+ "jobId": "job_201211040003_0010",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352014650745,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0024/job.xml",
+ "elapsedTime": 70488,
+ "inputBytes": 650897,
+ "jobId": "job_201211040003_0024",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352017445920,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0022/job.xml",
+ "elapsedTime": 259499,
+ "inputBytes": 57690215,
+ "jobId": "job_201211040003_0022",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352017024139,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0025/job.xml",
+ "elapsedTime": 81683,
+ "inputBytes": 650897,
+ "jobId": "job_201211040003_0025",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352017532797,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0023/job.xml",
+ "elapsedTime": 124856,
+ "inputBytes": 27260385,
+ "jobId": "job_201211040003_0023",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352017303539,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0021/job.xml",
+ "elapsedTime": 275269,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0021",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352016729699,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0039/job.xml",
+ "elapsedTime": 287725,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0039",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 59144990,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352096252185,
+ "userName": "root",
+ "workflowEntityName": "89",
+ "workflowId": "pig_f69499b1-a504-433e-8904-0760deb5a183"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0040/job.xml",
+ "elapsedTime": 251452,
+ "inputBytes": 59145377,
+ "jobId": "job_201211040003_0040",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352096557046,
+ "userName": "root",
+ "workflowEntityName": "97",
+ "workflowId": "pig_f69499b1-a504-433e-8904-0760deb5a183"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0041/job.xml",
+ "elapsedTime": 101437,
+ "inputBytes": 54520770,
+ "jobId": "job_201211040003_0041",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 2,
+ "outputBytes": 67032,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352096825063,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "pig_f69499b1-a504-433e-8904-0760deb5a183"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0002/job.xml",
+ "elapsedTime": 265358,
+ "inputBytes": 57690216,
+ "jobId": "job_201211042325_0002",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352100793460,
+ "userName": "root",
+ "workflowEntityName": "80",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0005/job.xml",
+ "elapsedTime": 86065,
+ "inputBytes": 650899,
+ "jobId": "job_201211042325_0005",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 659755,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352101324336,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0004/job.xml",
+ "elapsedTime": 72907,
+ "inputBytes": 650899,
+ "jobId": "job_201211042325_0004",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 64,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352101233608,
+ "userName": "root",
+ "workflowEntityName": "86",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0001/job.xml",
+ "elapsedTime": 288955,
+ "inputBytes": 10409082,
+ "jobId": "job_201211042325_0001",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 57689830,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352100483608,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0003/job.xml",
+ "elapsedTime": 132235,
+ "inputBytes": 27260387,
+ "jobId": "job_201211042325_0003",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 650512,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352101079872,
+ "userName": "root",
+ "workflowEntityName": "83",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211042325_0006/job.xml",
+ "elapsedTime": 0,
+ "inputBytes": 0,
+ "jobId": "job_201211042325_0006",
+ "jobName": "PigLatin:script1-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 0,
+ "reduces": 1,
+ "status": "RUNNING",
+ "submitTime": 1352194719224,
+ "userName": "root",
+ "workflowEntityName": "72",
+ "workflowId": "pig_31b2111b-cc2e-4024-a8db-d181855a463f"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0047/job.xml",
+ "elapsedTime": 97995,
+ "inputBytes": 54520768,
+ "jobId": "job_201211040003_0047",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 2,
+ "outputBytes": 67032,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352098273428,
+ "userName": "root",
+ "workflowEntityName": "103",
+ "workflowId": "hive_097d0698-3620-4232-9c79-4deccbf6c98a"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0045/job.xml",
+ "elapsedTime": 283758,
+ "inputBytes": 10409082,
+ "jobId": "job_201211040003_0045",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 59144990,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352097700564,
+ "userName": "root",
+ "workflowEntityName": "89",
+ "workflowId": "hive_097d0698-3620-4232-9c79-4deccbf6c98a"
+ },
+ {
+ "confPath": "hdfs://localhost:8020/tmp/hadoop-root/mapred/staging/root/.staging/job_201211040003_0046/job.xml",
+ "elapsedTime": 247809,
+ "inputBytes": 59145375,
+ "jobId": "job_201211040003_0046",
+ "jobName": "PigLatin:script2-hadoop.pig",
+ "maps": 1,
+ "outputBytes": 27259999,
+ "reduces": 1,
+ "status": "SUCCESS",
+ "submitTime": 1352098005744,
+ "userName": "root",
+ "workflowEntityName": "97",
+ "workflowId": "hive_097d0698-3620-4232-9c79-4deccbf6c98a"
}
]
} \ No newline at end of file
diff --git a/ambari-web/app/assets/data/apps/runs.json b/ambari-web/app/assets/data/apps/runs.json
index 7b2cf60dd7..340363f405 100644
--- a/ambari-web/app/assets/data/apps/runs.json
+++ b/ambari-web/app/assets/data/apps/runs.json
@@ -19,7 +19,7 @@
]
}
},
- "workflowId": "pig_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6",
+ "workflowId": "mr_b6d5cc44-ac51-4ecd-92c7-2e477c2fbed6",
"workflowName": "script2-hadoop.pig"
},
{
@@ -50,7 +50,7 @@
]
}
},
- "workflowId": "pig_7c779523-6bca-416e-89b3-b01b73a60174",
+ "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174",
"workflowName": "script1-hadoop.pig"
},
{
@@ -112,7 +112,7 @@
]
}
},
- "workflowId": "pig_25547729-88f9-4287-a45a-64901a82f22b",
+ "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b",
"workflowName": "script1-hadoop.pig"
},
{
@@ -135,7 +135,7 @@
]
}
},
- "workflowId": "pig_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4",
+ "workflowId": "hive_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4",
"workflowName": "script2-hadoop.pig"
},
{
@@ -189,7 +189,7 @@
]
}
},
- "workflowId": "pig_c832f923-9bd4-421f-9a51-8f45991d91de",
+ "workflowId": "hive_c832f923-9bd4-421f-9a51-8f45991d91de",
"workflowName": "script2-hadoop.pig"
},
{
@@ -220,7 +220,7 @@
]
}
},
- "workflowId": "pig_a0aade31-47f8-475b-b887-60a79bcea5c4",
+ "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4",
"workflowName": "script1-hadoop.pig"
},
{
@@ -282,7 +282,7 @@
]
}
},
- "workflowId": "pig_b6bf29a4-324f-4435-8ed3-bee10622ea48",
+ "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48",
"workflowName": "script1-hadoop.pig"
},
{
@@ -367,7 +367,7 @@
]
}
},
- "workflowId": "pig_73e04732-ea7f-43b8-9a2f-0f5a30e665da",
+ "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da",
"workflowName": "script1-hadoop.pig"
},
{
@@ -421,7 +421,7 @@
]
}
},
- "workflowId": "pig_097d0698-3620-4232-9c79-4deccbf6c98a",
+ "workflowId": "hive_097d0698-3620-4232-9c79-4deccbf6c98a",
"workflowName": "script2-hadoop.pig"
}
]} \ No newline at end of file
diff --git a/ambari-web/app/assets/data/clusters/info.json b/ambari-web/app/assets/data/clusters/info.json
index 845255b679..701989a937 100644
--- a/ambari-web/app/assets/data/clusters/info.json
+++ b/ambari-web/app/assets/data/clusters/info.json
@@ -1,8 +1,8 @@
{
- "href" : "http://ec2-107-21-153-79.compute-1.amazonaws.com:9998/clusters",
+ "href" : "http://ambari:9998/clusters",
"items" : [
{
- "href" : "http://ec2-107-21-153-79.compute-1.amazonaws.com:9998/clusters/mycluster",
+ "href" : "http://ambari:9998/clusters/mycluster",
"Clusters" : {
"cluster_name" : "mycluster"
}
diff --git a/ambari-web/app/assets/data/users/users.json b/ambari-web/app/assets/data/users/users.json
index 2cc2bfd0c2..69763f83f8 100644
--- a/ambari-web/app/assets/data/users/users.json
+++ b/ambari-web/app/assets/data/users/users.json
@@ -4,22 +4,22 @@
{
"href" : "http://ambari:8080/api/users/admin",
"Users" :
- { "user_name" : "admin", "roles" : "admin,user" }
+ { "user_name" : "admin", "roles" : "admin,user", "type" : "local" }
},
{
"href" : "http://ambari:8080/api/users/user",
"Users" :
- { "user_name" : "user", "roles" : "user" }
+ { "user_name" : "user", "roles" : "user", "type" : "local" }
},
{
"href" : "http://ambari:8080/api/users/john",
"Users" :
- { "user_name" : "john", "roles" : "admin,user" }
+ { "user_name" : "john", "roles" : "admin,user", "type" : "LDAP" }
},
{
"href" : "http://ambari:8080/api/users/mike",
"Users" :
- { "user_name" : "mike", "roles" : "user" }
+ { "user_name" : "mike", "roles" : "user", "type" : "LDAP" }
}
]
}
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 668d7f19e4..f34e36905a 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -35,7 +35,7 @@ App.ClusterController = Em.Controller.extend({
},
dataLoadList: Em.Object.create({
'hosts': false,
- //'runs': false,
+ 'runs': false,
'services': false,
'cluster' : false,
'racks' : false,
@@ -45,10 +45,14 @@ App.ClusterController = Em.Controller.extend({
/**
* load cluster name
*/
- loadClusterName: function(){
+ loadClusterName: function(reload){
+ if(this.get('clusterName') && !reload){
+ return;
+ }
var self = this;
var url = (App.testMode) ? '/data/clusters/info.json' : '/api/clusters';
$.ajax({
+ async: false,
type: "GET",
url: url,
dataType: 'json',
@@ -57,10 +61,8 @@ App.ClusterController = Em.Controller.extend({
self.set('cluster', data.items[0]);
},
error: function (request, ajaxOptions, error) {
- //do something
console.log('failed on loading cluster name');
- //hack skip loading when data ain't received
- if(!App.testMode) self.set('isLoaded', true);
+ self.set('isLoaded', true);
},
statusCode: require('data/statusCodes')
});
@@ -114,12 +116,12 @@ App.ClusterController = Em.Controller.extend({
* Sorted list of alerts.
* Changes whenever alerts are loaded.
*/
- alerts: function(){
+ alerts: function () {
var alerts = App.Alert.find();
var alertsArray = alerts.toArray();
- var sortedArray = alertsArray.sort(function(left, right){
+ var sortedArray = alertsArray.sort(function (left, right) {
var statusDiff = right.get('status') - left.get('status');
- if(statusDiff==0){ // same error severity - sort by time
+ if (statusDiff == 0) { // same error severity - sort by time
var rightTime = right.get('date');
var leftTime = left.get('time');
rightTime = rightTime ? rightTime.getTime() : 0;
@@ -145,21 +147,21 @@ App.ClusterController = Em.Controller.extend({
}
var dataUrl;
var ajaxOptions = {
- dataType: "jsonp",
- jsonp: "jsonp",
- context: this,
- complete: function (jqXHR, textStatus) {
- this.updateLoadStatus('alerts')
- }
- };
- if(App.testMode){
+ dataType: "jsonp",
+ jsonp: "jsonp",
+ context: this,
+ complete: function (jqXHR, textStatus) {
+ this.updateLoadStatus('alerts')
+ }
+ };
+ if (App.testMode) {
dataUrl = "/data/alerts/alerts.jsonp";
ajaxOptions.jsonpCallback = "jQuery172040994187095202506_1352498338217";
- }else{
+ } else {
dataUrl = nagiosUrl + "/hdp/nagios/nagios_alerts.php?q1=alerts&alert_type=all";
}
App.HttpClient.get(dataUrl, App.alertsMapper, ajaxOptions);
- }else{
+ } else {
this.updateLoadStatus('alerts');
console.log("No Nagios URL provided.")
}
@@ -179,7 +181,7 @@ App.ClusterController = Em.Controller.extend({
var hostsUrl = this.getUrl('/data/hosts/hosts.json', '/hosts?fields=*');
var servicesUrl1 = this.getUrl('/data/dashboard/services.json', '/services?ServiceInfo/service_name!=MISCELLANEOUS&ServiceInfo/service_name!=DASHBOARD&fields=components/host_components/*');
var servicesUrl2 = this.getUrl('/data/dashboard/services.json', '/services?ServiceInfo/service_name!=MISCELLANEOUS&ServiceInfo/service_name!=DASHBOARD&fields=components/ServiceComponentInfo');
- var usersUrl = this.getUrl('/data/users/users.json', '/users/?fields=*');
+ var usersUrl = App.testMode ? '/data/users/users.json' : '/api/users/?fields=*';
var runsUrl = App.testMode ? "/data/apps/runs.json" : "/api/jobhistory/workflow";
var racksUrl = "/data/racks/racks.json";
@@ -188,29 +190,40 @@ App.ClusterController = Em.Controller.extend({
complete:function(jqXHR, textStatus){
self.updateLoadStatus('racks');
}
+ },function(jqXHR, textStatus){
+ self.updateLoadStatus('racks');
});
+
App.HttpClient.get(clusterUrl, App.clusterMapper,{
complete:function(jqXHR, textStatus){
self.updateLoadStatus('cluster');
}
+ },function(jqXHR, textStatus){
+ self.updateLoadStatus('cluster');
});
-// App.HttpClient.get(runsUrl, App.runsMapper,{
-// complete:function(jqXHR, textStatus) {
-// self.updateLoadStatus('runs');
-// }
-// });
+ App.HttpClient.get(runsUrl, App.runsMapper,{
+ complete:function(jqXHR, textStatus) {
+ self.updateLoadStatus('runs');
+ }
+ },function(jqXHR, textStatus){
+ self.updateLoadStatus('runs');
+ });
App.HttpClient.get(hostsUrl, App.hostsMapper,{
complete:function(jqXHR, textStatus){
self.updateLoadStatus('hosts');
}
+ },function(jqXHR, textStatus){
+ self.updateLoadStatus('hosts');
});
App.HttpClient.get(usersUrl, App.usersMapper,{
complete:function(jqXHR, textStatus){
self.updateLoadStatus('users');
}
+ },function(jqXHR, textStatus){
+ self.updateLoadStatus('users');
});
//////////////////////////////
@@ -224,59 +237,71 @@ App.ClusterController = Em.Controller.extend({
}
};
var serviceComponentMapper = {
- map: function(data){
- serviceComponentJson = data;
- if(metricsJson!=null && serviceComponentJson!=null){
- var hdfsSvc1 = null;
- var hdfsSvc2 = null;
- var mrSvc1 = null;
- var mrSvc2 = null;
- metricsJson.items.forEach(function(svc){
- if(svc.ServiceInfo.service_name=="HDFS"){
- hdfsSvc1 = svc;
- }
- if(svc.ServiceInfo.service_name=="MAPREDUCE"){
- mrSvc1 = svc;
- }
- });
- serviceComponentJson.items.forEach(function(svc){
- if(svc.ServiceInfo.service_name=="HDFS"){
- hdfsSvc2 = svc;
- }
- if(svc.ServiceInfo.service_name=="MAPREDUCE"){
- mrSvc2 = svc;
- }
- });
- var nnC1 = null;
- var nnC2 = null;
- var jtC1 = null;
- var jtC2 = null;
- hdfsSvc1.components.forEach(function(c){
- if(c.ServiceComponentInfo.component_name=="NAMENODE"){
+ map: function (data) {
+ serviceComponentJson = data;
+ if (metricsJson != null && serviceComponentJson != null) {
+ var hdfsSvc1 = null;
+ var hdfsSvc2 = null;
+ var mrSvc1 = null;
+ var mrSvc2 = null;
+ metricsJson.items.forEach(function (svc) {
+ if (svc.ServiceInfo.service_name == "HDFS") {
+ hdfsSvc1 = svc;
+ }
+ if (svc.ServiceInfo.service_name == "MAPREDUCE") {
+ mrSvc1 = svc;
+ }
+ });
+ serviceComponentJson.items.forEach(function (svc) {
+ if (svc.ServiceInfo.service_name == "HDFS") {
+ hdfsSvc2 = svc;
+ }
+ if (svc.ServiceInfo.service_name == "MAPREDUCE") {
+ mrSvc2 = svc;
+ }
+ });
+ var nnC1 = null;
+ var nnC2 = null;
+ var jtC1 = null;
+ var jtC2 = null;
+ if (hdfsSvc1) {
+ hdfsSvc1.components.forEach(function (c) {
+ if (c.ServiceComponentInfo.component_name == "NAMENODE") {
nnC1 = c;
}
});
- hdfsSvc2.components.forEach(function(c){
- if(c.ServiceComponentInfo.component_name=="NAMENODE"){
+ }
+ if (hdfsSvc2) {
+ hdfsSvc2.components.forEach(function (c) {
+ if (c.ServiceComponentInfo.component_name == "NAMENODE") {
nnC2 = c;
}
});
- mrSvc1.components.forEach(function(c){
- if(c.ServiceComponentInfo.component_name=="JOBTRACKER"){
+ }
+ if (mrSvc1) {
+ mrSvc1.components.forEach(function (c) {
+ if (c.ServiceComponentInfo.component_name == "JOBTRACKER") {
jtC1 = c;
}
});
- mrSvc2.components.forEach(function(c){
- if(c.ServiceComponentInfo.component_name=="JOBTRACKER"){
+ }
+ if (mrSvc2) {
+ mrSvc2.components.forEach(function (c) {
+ if (c.ServiceComponentInfo.component_name == "JOBTRACKER") {
jtC2 = c;
}
});
+ }
+ if (nnC1 && nnC2) {
nnC1.ServiceComponentInfo = nnC2.ServiceComponentInfo;
+ }
+ if (jtC1 && jtC2) {
jtC1.ServiceComponentInfo = jtC2.ServiceComponentInfo;
- App.servicesMapper.map(metricsJson);
- self.updateLoadStatus('services');
}
+ App.servicesMapper.map(metricsJson);
+ self.updateLoadStatus('services');
}
+ }
}
App.HttpClient.get(servicesUrl1, metricsMapper,{
complete:function(jqXHR, textStatus){
@@ -290,8 +315,9 @@ App.ClusterController = Em.Controller.extend({
// Hack for services END //
/////////////////////////////
- }.observes('clusterName'),
+ },
+
clusterName: function(){
- return (this.get('cluster')) ? this.get('cluster').Clusters.cluster_name : 'mycluster';
+ return (this.get('cluster')) ? this.get('cluster').Clusters.cluster_name : null;
}.property('cluster')
})
diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js
index 91d93cdedf..669565b52b 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -226,9 +226,9 @@ App.InstallerController = Em.Controller.extend({
slaveComponentHosts: null,
hostSlaveComponents: null,
masterComponentHosts: null,
- hostToMasterComponent: null,
serviceConfigProperties: null,
- advancedServiceConfig: null
+ advancedServiceConfig: null,
+ controllerName: 'installerController'
}),
/**
@@ -260,9 +260,6 @@ App.InstallerController = Em.Controller.extend({
App.db.setClusterStatus(clusterStatus);
console.log("InstallerController:saveClusterInfo: saved data ", cluster);
-
- //probably next line is extra work - need to check it
- //this.set('content.cluster', cluster);
},
/**
@@ -379,7 +376,8 @@ App.InstallerController = Em.Controller.extend({
name: _host.name,
cpu: _host.cpu,
memory: _host.memory,
- bootStatus: _host.bootStatus
+ bootStatus: _host.bootStatus,
+ isInstalled: false
};
});
console.log('installerController:saveConfirmedHosts: save hosts ', hostInfo);
@@ -454,12 +452,11 @@ App.InstallerController = Em.Controller.extend({
*/
saveServices: function (stepController) {
var serviceNames = [];
- // we can also do it without stepController since all data,
- // changed at page, automatically changes in model(this.content.services)
App.db.setService(stepController.get('content'));
stepController.filterProperty('isSelected', true).forEach(function (item) {
serviceNames.push(item.serviceName);
});
+ this.set('content.selectedServiceNames', serviceNames);
App.db.setSelectedServiceNames(serviceNames);
console.log('installerController.saveServices: saved data ', serviceNames);
},
@@ -470,32 +467,20 @@ App.InstallerController = Em.Controller.extend({
*/
saveMasterComponentHosts: function (stepController) {
var obj = stepController.get('selectedServicesMasters');
- console.log("installerController.selectedServicesMasters: saved hosts ", stepController.get('selectedServicesMasters'));
+
var masterComponentHosts = [];
obj.forEach(function (_component) {
masterComponentHosts.push({
display_name: _component.get('display_name'),
component: _component.get('component_name'),
- hostName: _component.get('selectedHost')
+ hostName: _component.get('selectedHost'),
+ isInstalled: false
});
});
- console.log("installerController.saveComponentHosts: saved hosts ", masterComponentHosts);
+ console.log("installerController.saveMasterComponentHosts: saved hosts ", masterComponentHosts);
App.db.setMasterComponentHosts(masterComponentHosts);
this.set('content.masterComponentHosts', masterComponentHosts);
-
- var hosts = masterComponentHosts.mapProperty('hostName').uniq();
- var hostsMasterServicesMapping = [];
- hosts.forEach(function (_host) {
- var componentsOnHost = masterComponentHosts.filterProperty('hostName', _host).mapProperty('component');
- hostsMasterServicesMapping.push({
- hostname: _host,
- components: componentsOnHost
- });
- }, this);
- console.log("installerController.setHostToMasterComponent: saved hosts ", hostsMasterServicesMapping);
- App.db.setHostToMasterComponent(hostsMasterServicesMapping);
- this.set('content.hostToMasterComponent', hostsMasterServicesMapping);
},
/**
@@ -505,10 +490,6 @@ App.InstallerController = Em.Controller.extend({
var masterComponentHosts = App.db.getMasterComponentHosts();
this.set("content.masterComponentHosts", masterComponentHosts);
console.log("InstallerController.loadMasterComponentHosts: loaded hosts ", masterComponentHosts);
-
- var hostsMasterServicesMapping = App.db.getHostToMasterComponent();
- this.set("content.hostToMasterComponent", hostsMasterServicesMapping);
- console.log("InstallerController.loadHostToMasterComponent: loaded hosts ", hostsMasterServicesMapping);
},
/**
@@ -532,25 +513,25 @@ App.InstallerController = Em.Controller.extend({
hosts.forEach(function (host) {
if (host.get('isDataNode')) {
dataNodeHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (isMrSelected && host.get('isTaskTracker')) {
taskTrackerHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (isHbSelected && host.get('isRegionServer')) {
regionServerHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (host.get('isClient')) {
clientHosts.pushObject({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
@@ -615,8 +596,8 @@ App.InstallerController = Em.Controller.extend({
stepController.get('stepConfigs').forEach(function (_content) {
_content.get('configs').forEach(function (_configProperties) {
var displayType = _configProperties.get('displayType');
- if(displayType === 'directories' || displayType === 'advanced' || displayType === 'directory') {
- var value = _configProperties.get('value').replace(/[\s,]+/g,',');
+ if(displayType === 'directories' || displayType === 'directory') {
+ var value = _configProperties.get('value').split(/\s+/g).join(',');
_configProperties.set('value',value);
}
var configProperty = {
@@ -678,15 +659,6 @@ App.InstallerController = Em.Controller.extend({
},
/**
- * Load HostToMasterComponent array
- */
- loadHostToMasterComponent: function () {
- var list = App.db.getHostToMasterComponent();
- this.set('content.hostToMasterComponent', list);
- console.log("InstallerController.loadHostToMasterComponent: loaded list ", list);
- },
-
- /**
* Load data for all steps until <code>current step</code>
*/
loadAllPriorSteps: function () {
@@ -699,13 +671,12 @@ App.InstallerController = Em.Controller.extend({
this.loadServiceConfigProperties();
case '6':
this.loadSlaveComponentHosts();
+ this.loadClients();
case '5':
this.loadMasterComponentHosts();
- this.loadHostToMasterComponent();
this.loadConfirmedHosts();
case '4':
this.loadServices();
- this.loadClients();
case '3':
this.loadConfirmedHosts();
case '2':
@@ -857,6 +828,14 @@ App.InstallerController = Em.Controller.extend({
statusCode: require('data/statusCodes')
});
+ },
+
+ /**
+ * Clear all temporary data
+ */
+ finish: function(){
+ this.setCurrentStep('1', false);
+ App.db.setService(undefined); //not to use this data at AddService page
}
});
diff --git a/ambari-web/app/controllers/main.js b/ambari-web/app/controllers/main.js
index cbd310809b..96852cdba8 100644
--- a/ambari-web/app/controllers/main.js
+++ b/ambari-web/app/controllers/main.js
@@ -29,7 +29,7 @@ App.MainController = Em.Controller.extend({
*/
initialize: function(){
this.startLoadOperationsPeriodically();
- App.router.get('clusterController').loadClusterName();
+ App.router.get('clusterController').loadClusterData();
},
startLoadOperationsPeriodically: function() {
App.router.get('backgroundOperationsController').set('isWorking', true);
diff --git a/ambari-web/app/controllers/main/admin/user.js b/ambari-web/app/controllers/main/admin/user.js
index a69ec5ef07..e8e12869a5 100644
--- a/ambari-web/app/controllers/main/admin/user.js
+++ b/ambari-web/app/controllers/main/admin/user.js
@@ -21,15 +21,50 @@ var App = require('app');
App.MainAdminUserController = Em.Controller.extend({
name:'mainAdminUserController',
deleteRecord:function (event) {
-
if (event.context.get('userName') == App.get('router').getLoginName()) {
- alert(Em.I18n.t('admin.users.deleteYourselfMessage'));
+ App.ModalPopup.show({
+ header:Em.I18n.t('admin.users.delete.yourself.header'),
+ body:Em.I18n.t('admin.users.delete.yourself.message'),
+ onPrimary:function (event) {
+ this.hide();
+ },
+ secondary:false
+ });
+
return;
}
+ ;
- if (confirm(Em.I18n.t('question.sure'))) {
- event.context.deleteRecord();
- App.store.commit();
- }
+ App.ModalPopup.show({
+ itemToDelete:event.context,
+ header:Em.I18n.t('admin.users.delete.header').format(event.context.get('userName')),
+ body:Em.I18n.t('question.sure'),
+ primary:Em.I18n.t('yes'),
+ secondary:Em.I18n.t('no'),
+ controller:this.controllers.mainAdminUserEditController,
+ onPrimary:function (event) {
+
+ //TODO: change sendCommandToServer parametrs for proper API request
+ this.get('controller').sendCommandToServer('/users/delete/' + this.get('itemToDelete').context.get("userName"), {
+ Users:{ /* password: form.getValues().password, roles: form.getValues().roles*/ }
+ },
+ function (requestId) {
+
+ if (!requestId) {
+ return;
+ }
+
+ this.get('itemToDelete').context.deleteRecord();
+ try {
+ App.store.commit()
+ } catch (err) {
+ }
+ ;
+ })
+ },
+ onSecondary:function (event) {
+ this.hide();
+ }
+ });
}
}) \ No newline at end of file
diff --git a/ambari-web/app/controllers/main/apps/runs_controller.js b/ambari-web/app/controllers/main/apps/runs_controller.js
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ambari-web/app/controllers/main/apps/runs_controller.js
+++ /dev/null
diff --git a/ambari-web/app/controllers/main/dashboard.js b/ambari-web/app/controllers/main/dashboard.js
index fc994aa067..8f960a3747 100644
--- a/ambari-web/app/controllers/main/dashboard.js
+++ b/ambari-web/app/controllers/main/dashboard.js
@@ -39,9 +39,7 @@ App.MainDashboardController = Em.Controller.extend({
}
},
- services:function(){
- return App.router.get('mainServiceController.content');
- }.property('App.router.mainServiceController.content'),
+
alertsFilteredBy: 'All',
alertsFilter: function(event) {
if (event.context)
diff --git a/ambari-web/app/controllers/main/host/add_controller.js b/ambari-web/app/controllers/main/host/add_controller.js
index e615c80c1b..2333e0731a 100644
--- a/ambari-web/app/controllers/main/host/add_controller.js
+++ b/ambari-web/app/controllers/main/host/add_controller.js
@@ -42,7 +42,6 @@ App.AddHostController = Em.Controller.extend({
slaveComponentHosts: null,
hostSlaveComponents: null,
masterComponentHosts: null,
- hostToMasterComponent : null,
serviceConfigProperties: null
}),
@@ -323,14 +322,28 @@ App.AddHostController = Em.Controller.extend({
*/
saveConfirmedHosts: function (stepController) {
var hostInfo = {};
+
+ App.Host.find().forEach(function(_host){
+ hostInfo[_host.get('id')] = {
+ name: _host.get('hostName'),
+ cpu: _host.get('cpu'),
+ memory: _host.get('memory'),
+ bootStatus: 'success',
+ isInstalled: true
+ };
+ });
+
stepController.get('content.hostsInfo').forEach(function (_host) {
hostInfo[_host.name] = {
name: _host.name,
cpu: _host.cpu,
memory: _host.memory,
- bootStatus: _host.bootStatus
+ bootStatus: _host.bootStatus,
+ isInstalled: false
};
});
+
+
console.log('addHostController:saveConfirmedHosts: save hosts ', hostInfo);
App.db.setHosts(hostInfo);
this.set('content.hostsInfo', hostInfo);
@@ -428,19 +441,6 @@ App.AddHostController = Em.Controller.extend({
console.log("AddHostController.saveComponentHosts: saved hosts ", masterComponentHosts);
App.db.setMasterComponentHosts(masterComponentHosts);
this.set('content.masterComponentHosts', masterComponentHosts);
-
- var hosts = masterComponentHosts.mapProperty('hostName').uniq();
- var hostsMasterServicesMapping = [];
- hosts.forEach(function (_host) {
- var componentsOnHost = masterComponentHosts.filterProperty('hostName', _host).mapProperty('component');
- hostsMasterServicesMapping.push({
- hostname: _host,
- components: componentsOnHost
- });
- }, this);
- console.log("AddHostController.setHostToMasterComponent: saved hosts ", hostsMasterServicesMapping);
- App.db.setHostToMasterComponent(hostsMasterServicesMapping);
- this.set('content.hostToMasterComponent', hostsMasterServicesMapping);
},
/**
@@ -450,10 +450,6 @@ App.AddHostController = Em.Controller.extend({
var masterComponentHosts = App.db.getMasterComponentHosts();
this.set("content.masterComponentHosts", masterComponentHosts);
console.log("AddHostController.loadMasterComponentHosts: loaded hosts ", masterComponentHosts);
-
- var hostsMasterServicesMapping = App.db.getHostToMasterComponent();
- this.set("content.hostToMasterComponent", hostsMasterServicesMapping);
- console.log("AddHostController.loadHostToMasterComponent: loaded hosts ", hostsMasterServicesMapping);
},
/**
@@ -477,25 +473,25 @@ App.AddHostController = Em.Controller.extend({
hosts.forEach(function (host) {
if (host.get('isDataNode')) {
dataNodeHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (isMrSelected && host.get('isTaskTracker')) {
taskTrackerHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (isHbSelected && host.get('isRegionServer')) {
regionServerHosts.push({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
if (host.get('isClient')) {
clientHosts.pushObject({
- hostname: host.hostname,
+ hostName: host.hostName,
group: 'Default'
});
}
@@ -607,15 +603,6 @@ App.AddHostController = Em.Controller.extend({
},
/**
- * Load HostToMasterComponent array
- */
- loadHostToMasterComponent: function(){
- var list = App.db.getHostToMasterComponent();
- this.set('content.hostToMasterComponent', list);
- console.log("AddHostController.loadHostToMasterComponent: loaded list ", list);
- },
-
- /**
* Load data for all steps until <code>current step</code>
*/
loadAllPriorSteps: function () {
@@ -630,7 +617,6 @@ App.AddHostController = Em.Controller.extend({
case '4':
this.loadMasterComponentHosts();
this.loadSlaveComponentHosts();
- this.loadHostToMasterComponent();
this.loadConfirmedHosts();
case '3':
this.loadClients();
diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js
index 41c12dc077..a74c0945fa 100644
--- a/ambari-web/app/controllers/main/service/add_controller.js
+++ b/ambari-web/app/controllers/main/service/add_controller.js
@@ -42,8 +42,8 @@ App.AddServiceController = Em.Controller.extend({
slaveComponentHosts: null,
hostSlaveComponents: null,
masterComponentHosts: null,
- hostToMasterComponent : null,
- serviceConfigProperties: null
+ serviceConfigProperties: null,
+ controllerName: 'addServiceController'
}),
/**
@@ -177,25 +177,6 @@ App.AddServiceController = Em.Controller.extend({
},
/**
- * Save all info about claster to model
- * @param stepController Step1WizardController
- */
- saveClusterInfo: function (stepController) {
- var cluster = stepController.get('content.cluster');
- var clusterStatus = {
- status: cluster.status,
- isCompleted: cluster.isCompleted
- }
- App.db.setClusterName(cluster.name);
- App.db.setClusterStatus(clusterStatus);
-
- console.log("AddServiceController:saveClusterInfo: saved data ", cluster);
-
- //probably next line is extra work - need to check it
- this.set('content.cluster', cluster);
- },
-
- /**
* save status of the cluster. This is called from step8 and step9 to persist install and start requestId
* @param clusterStatus object with status, isCompleted, requestId, isInstallError and isStartError field.
*/
@@ -218,123 +199,21 @@ App.AddServiceController = Em.Controller.extend({
},
/**
- * Load all data for <code>Specify Host(install step2)</code> step
- * Data Example:
- * {
- * hostNames: '',
- * manualInstall: false,
- * sshKey: '',
- * passphrase: '',
- * confirmPassphrase: '',
- * localRepo: false,
- * localRepoPath: ''
- * }
- */
- loadInstallOptions: function () {
-
- if (!this.content.hosts) {
- this.content.hosts = Em.Object.create();
- }
-
- //TODO : rewire it as model. or not :)
- var hostsInfo = Em.Object.create();
-
- hostsInfo.hostNames = App.db.getAllHostNames() || ''; //empty string if undefined
-
- //TODO : should we check installType for add host wizard????
- var installType = App.db.getInstallType();
- //false if installType not equals 'manual'
- hostsInfo.manualInstall = installType && installType.installType === 'manual' || false;
-
- var softRepo = App.db.getSoftRepo();
- if (softRepo && softRepo.repoType === 'local') {
- hostsInfo.localRepo = true;
- hostsInfo.localRepopath = softRepo.repoPath;
- } else {
- hostsInfo.localRepo = false;
- hostsInfo.localRepoPath = '';
- }
-
- hostsInfo.sshKey = 'random';
- hostsInfo.passphrase = '';
- hostsInfo.confirmPassphrase = '';
-
- this.set('content.hosts', hostsInfo);
- console.log("AddServiceController:loadHosts: loaded data ", hostsInfo);
- },
-
- /**
- * Save data, which user filled, to main controller
- * @param stepController App.WizardStep2Controller
- */
- saveHosts: function (stepController) {
- //TODO: put data to content.hosts and only then save it)
-
- //App.db.setBootStatus(false);
- App.db.setAllHostNames(stepController.get('hostNames'));
- App.db.setHosts(stepController.getHostInfo());
- if (stepController.get('manualInstall') === false) {
- App.db.setInstallType({installType: 'ambari' });
- } else {
- App.db.setInstallType({installType: 'manual' });
- }
- if (stepController.get('localRepo') === false) {
- App.db.setSoftRepo({ 'repoType': 'remote', 'repoPath': null});
- } else {
- App.db.setSoftRepo({ 'repoType': 'local', 'repoPath': stepController.get('localRepoPath') });
- }
- },
-
- /**
- * Remove host from model. Used at <code>Confirm hosts(step2)</code> step
- * @param hosts Array of hosts, which we want to delete
- */
- removeHosts: function (hosts) {
- //todo Replace this code with real logic
- App.db.removeHosts(hosts);
- },
-
- /**
- * Save data, which user filled, to main controller
- * @param stepController App.WizardStep3Controller
- */
- saveConfirmedHosts: function (stepController) {
- var hostInfo = {};
- stepController.get('content').forEach(function (_host) {
- hostInfo[_host.name] = {
- name: _host.name,
- cpu: _host.cpu,
- memory: _host.memory,
- bootStatus: _host.bootStatus
- };
- });
- console.log('AddServiceController:saveConfirmedHosts: save hosts ', hostInfo);
- App.db.setHosts(hostInfo);
- this.set('content.hostsInfo', hostInfo);
- },
-
- /**
* Load confirmed hosts.
* Will be used at <code>Assign Masters(step5)</code> step
*/
loadConfirmedHosts: function(){
- var hosts=App.db.getHosts();
-
- hosts = {
- "192.168.1.1":{"name":"192.168.1.1","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.2":{"name":"192.168.1.2","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.3":{"name":"192.168.1.3","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.4":{"name":"192.168.1.4","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.5":{"name":"192.168.1.5","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.6":{"name":"192.168.1.6","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.7":{"name":"192.168.1.7","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.8":{"name":"192.168.1.8","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.9":{"name":"192.168.1.9","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.10":{"name":"192.168.1.10","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.11":{"name":"192.168.1.11","cpu":"2","memory":"2","bootStatus":"success"},
- "192.168.1.12":{"name":"192.168.1.12","cpu":"2","memory":"2","bootStatus":"pending"},
- "192.168.1.13":{"name":"192.168.1.13","cpu":"2","memory":"2","bootStatus":"success"}
+ var hosts = {};
+
+ App.Host.find().forEach(function(item){
+ hosts[item.get('id')] = {
+ name: item.get('id'),
+ cpu: item.get('cpu'),
+ memory: item.get('memory'),
+ bootStatus: "success",
+ isInstalled: true
};
+ });
this.set('content.hostsInfo', hosts);
},
@@ -357,6 +236,7 @@ App.AddServiceController = Em.Controller.extend({
}
}
App.db.setHosts(hostInfo);
+ this.set('content.hostsInfo', hostInfo);
console.log('AddServiceController:saveInstalledHosts: save hosts ', hostInfo);
},
@@ -374,6 +254,8 @@ App.AddServiceController = Em.Controller.extend({
hosts.passphrase = '';
hosts.confirmPassphrase = '';
}
+ App.db.setHosts(null);
+ App.db.setAllHostNames(null);
},
/**
@@ -381,6 +263,14 @@ App.AddServiceController = Em.Controller.extend({
*/
loadServices: function () {
var servicesInfo = App.db.getService();
+ if(!servicesInfo){
+ servicesInfo = require('data/mock/services').slice(0);
+ servicesInfo.forEach(function(item, index){
+ servicesInfo[index].isSelected = App.Service.find().someProperty('id', item.serviceName);
+ servicesInfo[index].isDisabled = servicesInfo[index].isSelected;
+ });
+ }
+
servicesInfo.forEach(function (item, index) {
servicesInfo[index] = Em.Object.create(item);
});
@@ -398,9 +288,10 @@ App.AddServiceController = Em.Controller.extend({
// we can also do it without stepController since all data,
// changed at page, automatically changes in model(this.content.services)
App.db.setService(stepController.get('content'));
- stepController.filterProperty('isSelected', true).forEach(function (item) {
+ stepController.filterProperty('isSelected', true).filterProperty('isDisabled', false).forEach(function (item) {
serviceNames.push(item.serviceName);
});
+ this.set('content.selectedServiceNames', serviceNames);
App.db.setSelectedServiceNames(serviceNames);
console.log('AddServiceController.saveServices: saved data ', serviceNames);
},
@@ -412,43 +303,39 @@ App.AddServiceController = Em.Controller.extend({
saveMasterComponentHosts: function (stepController) {
var obj = stepController.get('selectedServicesMasters');
var masterComponentHosts = [];
+ var installedComponents = App.Component.find();
+
obj.forEach(function (_component) {
- masterComponentHosts.push({
- display_name: _component.display_name,
- component: _component.component_name,
- hostName: _component.selectedHost
- });
+ if(!installedComponents.someProperty('componentName', _component.component_name)){
+ masterComponentHosts.push({
+ display_name: _component.display_name,
+ component: _component.component_name,
+ hostName: _component.selectedHost,
+ isInstalled: false
+ });
+ }
});
- console.log("AddServiceController.saveComponentHosts: saved hosts ", masterComponentHosts);
+ console.log("AddServiceController.saveMasterComponentHosts: saved hosts ", masterComponentHosts);
App.db.setMasterComponentHosts(masterComponentHosts);
this.set('content.masterComponentHosts', masterComponentHosts);
-
- var hosts = masterComponentHosts.mapProperty('hostName').uniq();
- var hostsMasterServicesMapping = [];
- hosts.forEach(function (_host) {
- var componentsOnHost = masterComponentHosts.filterProperty('hostName', _host).mapProperty('component');
- hostsMasterServicesMapping.push({
- hostname: _host,
- components: componentsOnHost
- });
- }, this);
- console.log("AddServiceController.setHostToMasterComponent: saved hosts ", hostsMasterServicesMapping);
- App.db.setHostToMasterComponent(hostsMasterServicesMapping);
- this.set('content.hostToMasterComponent', hostsMasterServicesMapping);
},
/**
* Load master component hosts data for using in required step controllers
*/
loadMasterComponentHosts: function () {
- var masterComponentHosts = App.db.getMasterComponentHosts();
+ var masterComponentHosts = App.db.getMasterComponentHosts() || [];
+ App.Component.find().filterProperty('isMaster', true).forEach(function(item){
+ masterComponentHosts.push({
+ component: item.get('componentName'),
+ display_name: item.get('displayName'),
+ hostName: item.get('host.hostName'),
+ isInstalled: true
+ })
+ });
this.set("content.masterComponentHosts", masterComponentHosts);
console.log("AddServiceController.loadMasterComponentHosts: loaded hosts ", masterComponentHosts);
-
- var hostsMasterServicesMapping = App.db.getHostToMasterComponent();
- this.set("content.hostToMasterComponent", hostsMasterServicesMapping);
- console.log("AddServiceController.loadHostToMasterComponent: loaded hosts ", hostsMasterServicesMapping);
},
/**
@@ -469,29 +356,36 @@ App.AddServiceController = Em.Controller.extend({
var regionServerHosts = [];
var clientHosts = [];
+ var installedComponents = App.Component.find();
+
hosts.forEach(function (host) {
+
if (host.get('isDataNode')) {
dataNodeHosts.push({
- hostname: host.hostname,
- group: 'Default'
+ hostName: host.hostName,
+ group: 'Default',
+ isInstalled: installedComponents.someProperty('componentName', 'DATANODE')
});
}
if (isMrSelected && host.get('isTaskTracker')) {
taskTrackerHosts.push({
- hostname: host.hostname,
- group: 'Default'
+ hostName: host.hostName,
+ group: 'Default',
+ isInstalled: installedComponents.someProperty('componentName', 'TASKTRACKER')
});
}
if (isHbSelected && host.get('isRegionServer')) {
regionServerHosts.push({
- hostname: host.hostname,
- group: 'Default'
+ hostName: host.hostName,
+ group: 'Default',
+ isInstalled: installedComponents.someProperty('componentName', 'HBASE_REGIONSERVER')
});
}
if (host.get('isClient')) {
clientHosts.pushObject({
- hostname: host.hostname,
- group: 'Default'
+ hostName: host.hostName,
+ group: 'Default',
+ isInstalled: installedComponents.someProperty('componentName', 'CLIENT')
});
}
}, this);
@@ -549,7 +443,8 @@ App.AddServiceController = Em.Controller.extend({
_content.get('configs').forEach(function (_configProperties) {
var configProperty = {
name: _configProperties.get('name'),
- value: _configProperties.get('value')
+ value: _configProperties.get('value'),
+ service: _configProperties.get('serviceName')
};
serviceConfigProperties.push(configProperty);
}, this);
@@ -602,15 +497,6 @@ App.AddServiceController = Em.Controller.extend({
},
/**
- * Load HostToMasterComponent array
- */
- loadHostToMasterComponent: function(){
- var list = App.db.getHostToMasterComponent();
- this.set('content.hostToMasterComponent', list);
- console.log("AddServiceController.loadHostToMasterComponent: loaded list ", list);
- },
-
- /**
* Load data for all steps until <code>current step</code>
*/
loadAllPriorSteps: function () {
@@ -623,10 +509,9 @@ App.AddServiceController = Em.Controller.extend({
this.loadServiceConfigProperties();
case '3':
this.loadClients();
+ this.loadSlaveComponentHosts();
case '2':
this.loadMasterComponentHosts();
- this.loadSlaveComponentHosts();
- this.loadHostToMasterComponent();
this.loadConfirmedHosts();
case '1':
this.loadServices();
@@ -640,10 +525,11 @@ App.AddServiceController = Em.Controller.extend({
installServices: function () {
var self = this;
var clusterName = this.get('content.cluster.name');
- var url = '/api/clusters/' + clusterName + '/services?state=INIT';
+ var url = (App.testMode) ? '/data/wizard/deploy/poll_1.json' : '/api/clusters/' + clusterName + '/services?state=INIT';
+ var method = (App.testMode) ? 'GET' : 'PUT';
var data = '{"ServiceInfo": {"state": "INSTALLED"}}';
$.ajax({
- type: 'PUT',
+ type: method,
url: url,
data: data,
async: false,
@@ -651,16 +537,19 @@ App.AddServiceController = Em.Controller.extend({
timeout: 5000,
success: function (data) {
var jsonData = jQuery.parseJSON(data);
+ var installSartTime = new Date().getTime();
console.log("TRACE: STep8 -> In success function for the installService call");
console.log("TRACE: STep8 -> value of the url is: " + url);
if (jsonData) {
var requestId = jsonData.href.match(/.*\/(.*)$/)[1];
+
console.log('requestId is: ' + requestId);
var clusterStatus = {
status: 'PENDING',
requestId: requestId,
isInstallError: false,
- isCompleted: false
+ isCompleted: false,
+ installStartTime: installSartTime
};
self.saveClusterStatus(clusterStatus);
} else {
diff --git a/ambari-web/app/controllers/wizard/step5_controller.js b/ambari-web/app/controllers/wizard/step5_controller.js
index baca3517ad..bddfdad340 100644
--- a/ambari-web/app/controllers/wizard/step5_controller.js
+++ b/ambari-web/app/controllers/wizard/step5_controller.js
@@ -94,6 +94,7 @@ App.WizardStep5Controller = Em.Controller.extend({
componentObj.component_name = _componentInfo.component_name;
componentObj.display_name = _componentInfo.display_name;
componentObj.selectedHost = this.selectHost(_componentInfo.component_name); // call the method that plays selectNode algorithm or fetches from server
+ componentObj.isInstalled = App.Component.find().someProperty('componentName', _componentInfo.component_name);
componentObj.availableHosts = [];
components.add(componentObj);
}, this);
@@ -106,6 +107,7 @@ App.WizardStep5Controller = Em.Controller.extend({
componentObj.component_name = _masterComponentHost.component;
componentObj.display_name = _masterComponentHost.display_name;
componentObj.selectedHost = _masterComponentHost.hostName;
+ componentObj.isInstalled = _masterComponentHost.isInstalled;
componentObj.availableHosts = [];
components.add(componentObj);
}, this);
diff --git a/ambari-web/app/controllers/wizard/step6_controller.js b/ambari-web/app/controllers/wizard/step6_controller.js
index aa4661afaf..9b7fa55e14 100644
--- a/ambari-web/app/controllers/wizard/step6_controller.js
+++ b/ambari-web/app/controllers/wizard/step6_controller.js
@@ -97,11 +97,11 @@ App.WizardStep6Controller = Em.Controller.extend({
/**
* Check whether current host is currently selected as master
- * @param hostname
+ * @param hostName
* @return {Boolean}
*/
- hasMasterComponents: function (hostname) {
- return this.get('content.masterComponentHosts').someProperty('hostName', hostname);
+ hasMasterComponents: function (hostName) {
+ return this.get('content.masterComponentHosts').someProperty('hostName', hostName);
},
selectAllDataNodes: function () {
@@ -173,7 +173,7 @@ App.WizardStep6Controller = Em.Controller.extend({
allHosts.forEach(function (_hostName) {
hostsObj.push(Em.Object.create({
- hostname: _hostName,
+ hostName: _hostName,
isMaster: false,
isDataNode: false,
isTaskTracker: false,
@@ -185,7 +185,7 @@ App.WizardStep6Controller = Em.Controller.extend({
if (!slaveHosts) { // we are at this page for the first time
if (allHosts.length > 3) { //multiple nodes scenario
hostsObj.forEach(function (host) {
- host.isMaster = this.hasMasterComponents(host.hostname);
+ host.isMaster = this.hasMasterComponents(host.hostName);
host.isDataNode = host.isTaskTracker
= host.isRegionServer = !host.isMaster;
}, this);
@@ -199,9 +199,10 @@ App.WizardStep6Controller = Em.Controller.extend({
masterComponents: maxNoofHostComponents
};
hostsObj.forEach(function (host) {
- host.isMaster = this.hasMasterComponents(host.hostname);
- if (this.getMasterComponentsForHost(host.hostname).length <= masterObj.masterComponents) {
- masterObj.masterComponents = this.getMasterComponentsForHost(host.hostname).length;
+ host.isMaster = this.hasMasterComponents(host.hostName);
+ var countMasterComp = this.getMasterComponentsForHost(host.hostName).length;
+ if (countMasterComp <= masterObj.masterComponents) {
+ masterObj.masterComponents = countMasterComp;
masterObj.host = host;
}
}, this);
@@ -216,7 +217,7 @@ App.WizardStep6Controller = Em.Controller.extend({
var dataNodes = slaveHosts.findProperty('componentName', 'DATANODE');
dataNodes.hosts.forEach(function (_dataNode) {
- var dataNode = hostsObj.findProperty('hostname', _dataNode.hostname);
+ var dataNode = hostsObj.findProperty('hostName', _dataNode.hostName);
if (dataNode) {
dataNode.set('isDataNode', true);
}
@@ -225,7 +226,7 @@ App.WizardStep6Controller = Em.Controller.extend({
if (this.get('isMrSelected')) {
var taskTrackers = slaveHosts.findProperty('componentName', 'TASKTRACKER');
taskTrackers.hosts.forEach(function (_taskTracker) {
- var taskTracker = hostsObj.findProperty('hostname', _taskTracker.hostname);
+ var taskTracker = hostsObj.findProperty('hostName', _taskTracker.hostName);
if (taskTracker) {
taskTracker.set('isTaskTracker', true);
}
@@ -235,7 +236,7 @@ App.WizardStep6Controller = Em.Controller.extend({
if (this.get('isHbSelected')) {
var regionServers = slaveHosts.findProperty('componentName', 'HBASE_REGIONSERVER');
regionServers.hosts.forEach(function (_regionServer) {
- var regionServer = hostsObj.findProperty('hostname', _regionServer.hostname);
+ var regionServer = hostsObj.findProperty('hostName', _regionServer.hostName);
if (regionServer) {
regionServer.set('isRegionServer', true);
}
@@ -244,14 +245,14 @@ App.WizardStep6Controller = Em.Controller.extend({
var clients = slaveHosts.findProperty('componentName', 'CLIENT');
clients.hosts.forEach(function (_client) {
- var client = hostsObj.findProperty('hostname', _client.hostname);
+ var client = hostsObj.findProperty('hostName', _client.hostName);
if (client) {
client.set('isClient', true);
}
}, this);
allHosts.forEach(function (_hostname) {
- var host = hostsObj.findProperty('hostname', _hostname);
+ var host = hostsObj.findProperty('hostName', _hostname);
if (host) {
host.set('isMaster', this.hasMasterComponents(_hostname));
}
@@ -266,16 +267,11 @@ App.WizardStep6Controller = Em.Controller.extend({
/**
* Return list of master components for specified <code>hostname</code>
- * @param hostname
+ * @param hostName
* @return {*}
*/
- getMasterComponentsForHost: function (hostname) {
- var hostInfo = this.get('content.hostToMasterComponent').findProperty('hostname', hostname);
- if (hostInfo) {
- return hostInfo.components;
- }
-
- return false;
+ getMasterComponentsForHost: function (hostName) {
+ return this.get('content.masterComponentHosts').filterProperty('hostName', hostName).mapProperty('component');
},
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index 5b5141ec4b..df265e931b 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -80,8 +80,7 @@ App.WizardStep7Controller = Em.Controller.extend({
_config.category = 'Advanced';
_config.displayName = _config.name;
_config.defaultValue = _config.value;
- if (/\${.*}/.test(_config.value)) {
- console.log("Step7: The name that matched regex: " + _config.name);
+ if (/\${.*}/.test(_config.value) || (service.serviceName !== 'OOZIE' && service.serviceName !== 'HBASE')) {
_config.isRequired = false;
_config.value = '';
} else if(/^\s+$/.test(_config.value)){
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index bcc4cff4a6..a27d7f92b9 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -29,7 +29,11 @@ App.WizardStep8Controller = Em.Controller.extend({
configMapping: require('data/config_mapping'),
selectedServices: function () {
- return this.get('content.services').filterProperty('isSelected', true);
+ var services = App.Service.find();
+ this.get('content.services').forEach(function (item) {
+ item.set('isInstalled', services.someProperty('serviceName', item.get('serviceName')));
+ });
+ return this.get('content.services').filterProperty('isSelected', true).filterProperty('isInstalled', false);
}.property('content.services').cacheable(),
clearStep: function () {
@@ -236,7 +240,7 @@ App.WizardStep8Controller = Em.Controller.extend({
hostObj = hostObj.concat(_hosts.hosts);
}, this);
- slaveHosts = hostObj.mapProperty('hostname').uniq();
+ slaveHosts = hostObj.mapProperty('hostName').uniq();
var totalHosts = masterHosts.concat(slaveHosts).uniq();
this.set('totalHosts', totalHosts);
@@ -593,6 +597,7 @@ App.WizardStep8Controller = Em.Controller.extend({
* Onclick handler for <code>next</code> button
*/
submit: function () {
+ debugger;
if (App.testMode) {
// App.router.send('next');
@@ -614,7 +619,11 @@ App.WizardStep8Controller = Em.Controller.extend({
/* Following create* functions are called on submitting step8 */
createCluster: function () {
- var self = this;
+
+ if (this.get('content.cluster.isCompleted')){
+ return false;
+ }
+
var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
var url = '/api/clusters/' + clusterName;
$.ajax({
@@ -715,15 +724,18 @@ App.WizardStep8Controller = Em.Controller.extend({
});
},
- registerHostsToCluster: function () {
- this.get('totalHosts').forEach(function (_hostname) {
- this.registerHostToCluster(_hostname);
- }, this);
+ registerHostsToCluster: function() {
+ var allHosts = this.get('content.hostsInfo');
+ for(var hostName in allHosts){
+ if(!allHosts[hostName].isInstalled){
+ this.registerHostToCluster(hostName);
+ }
+ }
},
- registerHostToCluster: function (hostname) {
+ registerHostToCluster: function (hostName) {
var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
- var url = '/api/clusters/' + clusterName + '/hosts/' + hostname;
+ var url = '/api/clusters/' + clusterName + '/hosts/' + hostName;
$.ajax({
type: 'POST',
url: url,
@@ -764,14 +776,16 @@ App.WizardStep8Controller = Em.Controller.extend({
if (_slaveHosts.componentName !== 'CLIENT') {
slaveObj.component = _slaveHosts.componentName;
_slaveHosts.hosts.forEach(function (_slaveHost) {
- slaveObj.hostName = _slaveHost.hostname;
+ slaveObj.hostName = _slaveHost.hostName;
+ slaveObj.isInstalled = _slaveHost.isInstalled;
this.createHostComponent(slaveObj);
}, this);
} else {
this.get('content.clients').forEach(function (_client) {
slaveObj.component = _client.component_name;
_slaveHosts.hosts.forEach(function (_slaveHost) {
- slaveObj.hostName = _slaveHost.hostname;
+ slaveObj.hostName = _slaveHost.hostName;
+ slaveObj.isInstalled = _slaveHost.isInstalled;
this.createHostComponent(slaveObj);
}, this);
}, this);
@@ -787,6 +801,11 @@ App.WizardStep8Controller = Em.Controller.extend({
},
createHostComponent: function (hostComponent) {
+ console.log(hostComponent);
+ if (hostComponent.isInstalled) {
+ return false;
+ }
+
var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
var url = '/api/clusters/' + clusterName + '/hosts/' + hostComponent.hostName + '/host_components/' + hostComponent.component;
@@ -814,9 +833,11 @@ App.WizardStep8Controller = Em.Controller.extend({
createConfigurations: function () {
var selectedServices = this.get('selectedServices');
- this.createConfigSite(this.createGlobalSiteObj());
- this.createConfigSite(this.createCoreSiteObj());
- this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+ if (!this.get('content.cluster.isCompleted')){
+ this.createConfigSite(this.createGlobalSiteObj());
+ this.createConfigSite(this.createCoreSiteObj());
+ this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+ }
if (selectedServices.someProperty('serviceName', 'MAPREDUCE')) {
this.createConfigSite(this.createMrSiteObj('MAPREDUCE'));
}
diff --git a/ambari-web/app/controllers/wizard/step9_controller.js b/ambari-web/app/controllers/wizard/step9_controller.js
index 4159c27d80..9484d774c3 100644
--- a/ambari-web/app/controllers/wizard/step9_controller.js
+++ b/ambari-web/app/controllers/wizard/step9_controller.js
@@ -44,14 +44,13 @@ App.WizardStep9Controller = Em.Controller.extend({
}.property('hosts.@each.status'),
navigateStep: function () {
-
- //TODO: uncomment following line after the hook up with the API call
if (this.get('content.cluster.isCompleted') === false) {
this.loadStep();
if (this.get('content.cluster.status') === 'INSTALL FAILED') {
- this.set('isStepCompleted', true);
- this.set('status', 'failed');
+ this.hosts.setEach('status', 'failed');
this.set('progress', '100');
+ this.set('isStepCompleted', true);
+ //this.set('status', 'failed');
} else if (this.get('content.cluster.status') === 'START FAILED') {
this.launchStartServices();
} else {
@@ -229,7 +228,7 @@ App.WizardStep9Controller = Em.Controller.extend({
isStartError: false,
isCompleted: false
};
- App.router.get('installerController').saveClusterStatus(clusterStatus);
+ App.router.get(self.get('content.controllerName')).saveClusterStatus(clusterStatus);
self.startPolling();
},
@@ -242,7 +241,7 @@ App.WizardStep9Controller = Em.Controller.extend({
isCompleted: false
};
- App.router.get('installerController').saveClusterStatus(clusterStatus);
+ App.router.get(self.get('content.controllerName')).saveClusterStatus(clusterStatus);
},
statusCode: require('data/statusCodes')
@@ -364,8 +363,8 @@ App.WizardStep9Controller = Em.Controller.extend({
}
if (this.isSuccess(polledData)) {
clusterStatus.status = 'STARTED';
- var serviceSartTime = new Date().getTime();
- var timeToStart = Math.floor((serviceSartTime - this.get('content.cluster.installStartTime')) / 60000);
+ var serviceStartTime = new Date().getTime();
+ var timeToStart = Math.floor((serviceStartTime - this.get('content.cluster.installStartTime')) / 60000);
clusterStatus.installTime = timeToStart;
this.set('status', 'success');
} else {
@@ -375,10 +374,10 @@ App.WizardStep9Controller = Em.Controller.extend({
this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData));
}
}
- App.router.get('installerController').saveClusterStatus(clusterStatus);
+ App.router.get(this.get('content.controllerName')).saveClusterStatus(clusterStatus);
this.set('isStepCompleted', true);
this.setTasksPerHost();
- App.router.get('installerController').saveInstalledHosts(this);
+ App.router.get(this.get('content.controllerName')).saveInstalledHosts(this);
return true;
}
} else if (this.get('content.cluster.status') === 'PENDING') {
@@ -389,16 +388,13 @@ App.WizardStep9Controller = Em.Controller.extend({
isCompleted: true,
installStartTime: this.get('content.cluster.installStartTime')
}
- var serviceSartTime = new Date().getTime();
- var timeToStart = serviceSartTime - this.get('content.cluster.installStartTime');
- console.log("STEP9: ********The time difference is = " + serviceSartTime / 60000);
if (this.isStepFailed(polledData)) {
console.log("In installation failure");
clusterStatus.status = 'INSTALL FAILED';
this.set('progress', '100');
this.set('status', 'failed');
this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData), 'failed');
- App.router.get('installerController').saveClusterStatus(clusterStatus);
+ App.router.get(this.get('content.controllerName')).saveClusterStatus(clusterStatus);
this.set('isStepCompleted', true);
} else {
clusterStatus.status = 'INSTALLED';
@@ -406,7 +402,7 @@ App.WizardStep9Controller = Em.Controller.extend({
this.launchStartServices(); //TODO: uncomment after the actual hookup
}
this.setTasksPerHost();
- App.router.get('installerController').saveInstalledHosts(this);
+ App.router.get(this.get('content.controllerName')).saveInstalledHosts(this);
return true;
}
}
@@ -459,7 +455,7 @@ App.WizardStep9Controller = Em.Controller.extend({
totalProgress = 0;
} */
var tasksData = polledData.tasks;
- console.log("The value of tasksData is: " + tasksData);
+ console.log("The value of tasksData is: ", tasksData);
if (!tasksData) {
console.log("Step9: ERROR: NO tasks availaible to process");
}
@@ -525,7 +521,7 @@ App.WizardStep9Controller = Em.Controller.extend({
dataType: 'text',
success: function (data) {
console.log("TRACE: In success function for the GET bootstrap call");
- console.log("TRACE: STep9 -> The value is: " + jQuery.parseJSON(data));
+ console.log("TRACE: STep9 -> The value is: ", jQuery.parseJSON(data));
var result = self.parseHostInfo(jQuery.parseJSON(data));
if (result !== true) {
window.setTimeout(function () {
diff --git a/ambari-web/app/data/config_mapping.js b/ambari-web/app/data/config_mapping.js
index 45f612b008..24bac56e55 100644
--- a/ambari-web/app/data/config_mapping.js
+++ b/ambari-web/app/data/config_mapping.js
@@ -283,6 +283,7 @@ module.exports = [
"value": "<templateName[0]>",
"filename": "mapred-site.xml"
},
+ /*
{
"name": "oozie.service.StoreService.jdbc.url",
"templateName": ["oozie_data_dir"],
@@ -290,9 +291,11 @@ module.exports = [
"value": "<templateName[0]>\/<foreignKey[0]>",
"filename": "oozie-site.xml"
},
+ */
{
"name": "oozie.base.url",
"templateName": ["oozieserver_host"],
+ "foreignKey": null,
"value": "http://<templateName[0]>:11000/oozie",
"filename": "oozie-site.xml"
},
@@ -300,22 +303,32 @@ module.exports = [
{
"name": "oozie.service.JPAService.jdbc.password",
"templateName": [],
+ "foreignKey": null,
"value": " ",
"filename": "oozie-site.xml"
},
{
"name": "oozie.db.schema.name",
"templateName": [],
+ "foreignKey": null,
"value": "oozie",
"filename": "oozie-site.xml"
},
{
"name": "oozie.service.JPAService.jdbc.url",
"templateName": [],
+ "foreignKey": null,
"value": "jdbc:derby:/var/data/oozie/oozie-db;create=true",
"filename": "oozie-site.xml"
},
{
+ "name": "oozie.action.ssh.http.command.post.options",
+ "templateName": [],
+ "foreignKey": null,
+ "value": " ",
+ "filename": "oozie-site.xml"
+ },
+ {
"name": "javax.jdo.option.ConnectionURL",
"templateName": ["hive_mysql_host", "hive_database_name"],
"foreignKey": null,
diff --git a/ambari-web/app/mappers/hosts_mapper.js b/ambari-web/app/mappers/hosts_mapper.js
index 2496fa403f..ec6f19db5f 100644
--- a/ambari-web/app/mappers/hosts_mapper.js
+++ b/ambari-web/app/mappers/hosts_mapper.js
@@ -31,15 +31,15 @@ App.hostsMapper = App.QuickDataMapper.create({
cpu : 'Hosts.cpu_count',
memory : 'Hosts.total_mem',
disk_info: 'Hosts.disk_info',
- $disk_usage: '40',
+ $disk_usage: '-',
$health_status: 'LIVE',
- $load_avg: '0.2, 1.2, 2.4',
+ $load_avg: '-',
$cpu_usage: 33,
$memory_usage: 26,
$network_usage: 36,
$io_usage: 39,
last_heart_beat_time : "Hosts.last_heartbeat_time",
- os : 'Hosts.os_arch',
+ os_arch : 'Hosts.os_arch',
os_type : 'Hosts.os_type',
ip : 'Hosts.ip'
}
diff --git a/ambari-web/app/mappers/runs_mapper.js b/ambari-web/app/mappers/runs_mapper.js
index 49cbc83a9a..ff0e264de8 100644
--- a/ambari-web/app/mappers/runs_mapper.js
+++ b/ambari-web/app/mappers/runs_mapper.js
@@ -24,7 +24,7 @@ App.runsMapper = App.QuickDataMapper.create({
if(!this.get('model')) {
return;
}
- if(json.workflows) {
+ if(json && json.workflows) {
var result = [];
json.workflows.forEach(function(item) {
var o = this.parseIt(item, this.config);
@@ -41,6 +41,7 @@ App.runsMapper = App.QuickDataMapper.create({
r = r.substr(0, r.length - 1);
r += '}}';
o.workflow_context = r;
+
result.push(o);
}, this);
App.store.loadMany(this.get('model'), result);
@@ -49,7 +50,6 @@ App.runsMapper = App.QuickDataMapper.create({
config : {
id: 'workflowId',
app_name: 'workflowName',
- $type: 'Pig',
num_jobs_total: 'numJobsTotal',
num_jobs_completed: 'numJobsCompleted',
user_name:'userName',
diff --git a/ambari-web/app/mappers/server_data_mapper.js b/ambari-web/app/mappers/server_data_mapper.js
index 3739e93471..cea7bc97d8 100644
--- a/ambari-web/app/mappers/server_data_mapper.js
+++ b/ambari-web/app/mappers/server_data_mapper.js
@@ -95,7 +95,7 @@ App.QuickDataMapper = App.ServerDataMapper.extend({
getJsonProperty: function (json, path) {
var pathArr = path.split('.');
var current = json;
- while (pathArr.length) {
+ while (pathArr.length && current) {
if (pathArr[0].substr(-1) == ']') {
var index = parseInt(pathArr[0].substr(-2, 1));
var attr = pathArr[0].substr(0, pathArr[0].length - 3);
diff --git a/ambari-web/app/mappers/services_mapper.js b/ambari-web/app/mappers/services_mapper.js
index dce3263f29..57ffd3b186 100644
--- a/ambari-web/app/mappers/services_mapper.js
+++ b/ambari-web/app/mappers/services_mapper.js
@@ -43,13 +43,13 @@ App.servicesMapper = App.QuickDataMapper.create({
decommision_data_nodes: 'decommission_data_nodes',
capacity_used: 'nameNodeComponent.ServiceComponentInfo.CapacityUsed',
capacity_total: 'nameNodeComponent.ServiceComponentInfo.CapacityTotal',
- ///// dfsTotalBlocks: 'nameNodeComponent.host_components[0].metrics.dfs.namenode.????',
- ///// dfsCorruptBlocks: DS.attr('number'),
- ///// dfsMissingBlocks: DS.attr('number'),
- ///// dfsUnderReplicatedBlocks: DS.attr('number'),
- ///// dfsTotalFiles: DS.attr('number'),
- upgradeStatus: 'nameNodeComponent.ServiceComponentInfo.UpgradeFinalized',
- safeModeStatus: 'nameNodeComponent.ServiceComponentInfo.Safemode'
+ dfs_total_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.BlocksTotal',
+ dfs_corrupt_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.CorruptBlocks',
+ dfs_missing_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.MissingBlocks',
+ dfs_under_replicated_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.UnderReplicatedBlocks',
+ dfs_total_files: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.FilesTotal',
+ upgrade_status: 'nameNodeComponent.ServiceComponentInfo.UpgradeFinalized',
+ safe_mode_status: 'nameNodeComponent.ServiceComponentInfo.Safemode'
},
mapReduceConfig: {
@@ -63,17 +63,18 @@ App.servicesMapper = App.QuickDataMapper.create({
black_list_trackers: 'black_list_trackers',
gray_list_trackers: 'gray_list_trackers',
map_slots: 'map_slots',
- reduce_slots: 'reduce_slots'
-// jobsSubmitted: DS.attr('number'),
-// jobsCompleted: DS.attr('number'),
-// mapSlotsOccupied: DS.attr('number'),
-// mapSlotsReserved: DS.attr('number'),
-// reduceSlotsOccupied: DS.attr('number'),
-// reduceSlotsReserved: DS.attr('number'),
-// mapsRunning: DS.attr('number'),
-// mapsWaiting: DS.attr('number'),
-// reducesRunning: DS.attr('number'),
-// reducesWaiting: DS.attr('number')
+ reduce_slots: 'reduce_slots',
+ jobs_submitted: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.jobs_submitted',
+ jobs_completed: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.jobs_completed',
+ map_slots_occupied: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.occupied_map_slots',
+ map_slots_reserved: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.reserved_map_slots',
+ reduce_slots_occupied: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.occupied_reduce_slots',
+ reduce_slots_reserved: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.reserved_reduce_slots',
+ maps_running: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.running_maps',
+ maps_waiting: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.waiting_maps',
+ reduces_running: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.running_reduces',
+ reduces_waiting: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.waiting_reduces',
+ trackers_decommisioned: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.trackers_decommissioned'
},
model2: App.Component,
@@ -149,23 +150,29 @@ App.servicesMapper = App.QuickDataMapper.create({
item.alive_trackers = [];
item.gray_list_trackers = [];
item.black_list_trackers = [];
- liveNodesJson.forEach(function(nj){
- item.alive_trackers.push(nj.hostname);
- if(nj.slots && nj.slots.map_slots)
- item.map_slots += nj.slots.map_slots;
- if(nj.slots && nj.slots.map_slots_used)
- item.map_slots_used += nj.slots.map_slots_used;
- if(nj.slots && nj.slots.reduce_slots)
- item.reduce_slots += nj.slots.reduce_slots;
- if(nj.slots && nj.slots.reduce_slots_used)
- item.reduce_slots_used += nj.slots.reduce_slots_used;
- });
- grayNodesJson.forEach(function(nj){
- item.gray_list_trackers.push(nj.hostname);
- });
- blackNodesJson.forEach(function(nj){
- item.black_list_trackers.push(nj.hostname);
- });
+ if (liveNodesJson != null) {
+ liveNodesJson.forEach(function(nj){
+ item.alive_trackers.push(nj.hostname);
+ if(nj.slots && nj.slots.map_slots)
+ item.map_slots += nj.slots.map_slots;
+ if(nj.slots && nj.slots.map_slots_used)
+ item.map_slots_used += nj.slots.map_slots_used;
+ if(nj.slots && nj.slots.reduce_slots)
+ item.reduce_slots += nj.slots.reduce_slots;
+ if(nj.slots && nj.slots.reduce_slots_used)
+ item.reduce_slots_used += nj.slots.reduce_slots_used;
+ });
+ }
+ if (grayNodesJson != null) {
+ grayNodesJson.forEach(function(nj){
+ item.gray_list_trackers.push(nj.hostname);
+ });
+ }
+ if (blackNodesJson != null) {
+ blackNodesJson.forEach(function(nj){
+ item.black_list_trackers.push(nj.hostname);
+ });
+ }
}
if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "TASKTRACKER") {
if(!item.task_trackers){
diff --git a/ambari-web/app/mappers/users_mapper.js b/ambari-web/app/mappers/users_mapper.js
index ef0375e31c..4bdff3edf5 100644
--- a/ambari-web/app/mappers/users_mapper.js
+++ b/ambari-web/app/mappers/users_mapper.js
@@ -21,7 +21,7 @@ App.usersMapper = App.QuickDataMapper.create({
model : App.User,
config : {
user_name : 'Users.user_name',
- roles : 'Users.roles'
+ roles : 'Users.roles',
+ type: 'Users.type'
}
-
});
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 730a0c9314..f6e378fec9 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -18,246 +18,254 @@
Em.I18n.translations = {
- 'app.name': 'Ambari',
-
- 'login.header': 'Sign in',
- 'login.username': 'Username',
- 'login.password': 'Password',
- 'login.loginButton': 'Sign in',
- 'login.error': 'Invalid username/password combination.',
-
- 'services.nagios.description': 'Nagios Monitoring and Alerting system',
- 'services.ganglia.description': 'Ganglia Metrics Collection system',
- 'services.hdfs.description': 'Apache Hadoop Distributed File System',
- 'services.mapreduce.description': 'Apache Hadoop Distributed Processing Framework',
- 'services.sqoop.description': 'Tool for transferring bulk data between Apache Hadoop and structured data stores such as relational databases',
- 'services.pig.description': 'Scripting platform for analyzing large datasets',
- 'services.hive.description': 'Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service',
- 'services.oozie.description': 'System for workflow coordination and execution of Apache Hadoop jobs',
- 'services.zookeeper.description': 'ZooKeeper desc',
- 'services.hbase.description': 'Non-relational distributed database and centralized service for configuration management & synchronization',
-
- 'topnav.help.href': 'http://incubator.apache.org/ambari/install.html',
-
- 'installer.header': 'Cluster Install Wizard',
- 'installer.step1.header': 'Welcome',
- 'installer.step1.body.header': 'Welcome to Apache Ambari!',
- 'installer.step1.body': 'Ambari makes it easy to install, manage, and monitor Hadoop clusters.<br>' +
+ 'app.name':'Ambari',
+
+ 'login.header':'Sign in',
+ 'login.username':'Username',
+ 'login.password':'Password',
+ 'login.loginButton':'Sign in',
+ 'login.error':'Invalid username/password combination.',
+
+ 'services.nagios.description':'Nagios Monitoring and Alerting system',
+ 'services.ganglia.description':'Ganglia Metrics Collection system',
+ 'services.hdfs.description':'Apache Hadoop Distributed File System',
+ 'services.mapreduce.description':'Apache Hadoop Distributed Processing Framework',
+ 'services.sqoop.description':'Tool for transferring bulk data between Apache Hadoop and structured data stores such as relational databases',
+ 'services.pig.description':'Scripting platform for analyzing large datasets',
+ 'services.hive.description':'Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service',
+ 'services.oozie.description':'System for workflow coordination and execution of Apache Hadoop jobs',
+ 'services.zookeeper.description':'ZooKeeper desc',
+ 'services.hbase.description':'Non-relational distributed database and centralized service for configuration management & synchronization',
+
+ 'topnav.help.href':'http://incubator.apache.org/ambari/install.html',
+
+ 'installer.header':'Cluster Install Wizard',
+ 'installer.step1.header':'Welcome',
+ 'installer.step1.body.header':'Welcome to Apache Ambari!',
+ 'installer.step1.body':'Ambari makes it easy to install, manage, and monitor Hadoop clusters.<br>' +
'We will walk you through the cluster installation process with this step-by-step wizard.',
- 'installer.step1.clusterName': 'Name your cluster',
- 'installer.step1.clusterName.tooltip.title': 'Cluster Name',
- 'installer.step1.clusterName.tooltip.content': 'Enter a unique cluster name. Cluster name cannot be changed later.',
- 'installer.step1.clusterName.error.required': 'Cluster Name is required',
- 'installer.step1.clusterName.error.whitespaces': 'Cluster Name cannot contain white spaces',
- 'installer.step1.clusterName.error.specialChar': 'Cluster Name cannot contain special characters',
-
- 'installer.step2.header': 'Install Options',
- 'installer.step2.body': 'Enter the list of hosts to be included in the cluster, provide your SSH key, and optionally specify a local repository.',
- 'installer.step2.targetHosts': 'Target Hosts',
- 'installer.step2.targetHosts.info': 'Enter a list of host names, one per line',
- 'installer.step2.hostPattern.tooltip.title': 'Pattern Expressions',
- 'installer.step2.hostPattern.tooltip.content': 'You can use pattern expressions to specify a number of target hosts. Explain brackets.',
- 'installer.step2.hostName.error.required': 'You must specify at least one host name',
- 'installer.step2.hostName.error.notRequired': 'Host Names will be ignored if not using SSH to automatically configure hosts',
- 'installer.step2.hostName.error.invalid': 'Invalid Host Name(s) - cannot start or end with a hyphen',
- 'installer.step2.sshKey': 'Host Connectivity Information',
- 'installer.step2.sshKey.info': 'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
- 'installer.step2.sshKey.error.required': 'SSH Private Key is required',
- 'installer.step2.passphrase.error.match': 'Passphrases do not match',
- 'installer.step2.manualInstall.label': 'Do not use SSH to automatically configure hosts ',
- 'installer.step2.manualInstall.info': 'By not using SSH to connect to the target hosts, you must manually install and start the ' +
+ 'installer.step1.clusterName':'Name your cluster',
+ 'installer.step1.clusterName.tooltip.title':'Cluster Name',
+ 'installer.step1.clusterName.tooltip.content':'Enter a unique cluster name. Cluster name cannot be changed later.',
+ 'installer.step1.clusterName.error.required':'Cluster Name is required',
+ 'installer.step1.clusterName.error.whitespaces':'Cluster Name cannot contain white spaces',
+ 'installer.step1.clusterName.error.specialChar':'Cluster Name cannot contain special characters',
+
+ 'installer.step2.header':'Install Options',
+ 'installer.step2.body':'Enter the list of hosts to be included in the cluster, provide your SSH key, and optionally specify a local repository.',
+ 'installer.step2.targetHosts':'Target Hosts',
+ 'installer.step2.targetHosts.info':'Enter a list of host names, one per line',
+ 'installer.step2.hostPattern.tooltip.title':'Pattern Expressions',
+ 'installer.step2.hostPattern.tooltip.content':'You can use pattern expressions to specify a number of target hosts. Explain brackets.',
+ 'installer.step2.hostName.error.required':'You must specify at least one host name',
+ 'installer.step2.hostName.error.notRequired':'Host Names will be ignored if not using SSH to automatically configure hosts',
+ 'installer.step2.hostName.error.invalid':'Invalid Host Name(s) - cannot start or end with a hyphen',
+ 'installer.step2.sshKey':'Host Connectivity Information',
+ 'installer.step2.sshKey.info':'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
+ 'installer.step2.sshKey.error.required':'SSH Private Key is required',
+ 'installer.step2.passphrase.error.match':'Passphrases do not match',
+ 'installer.step2.manualInstall.label':'Do not use SSH to automatically configure hosts ',
+ 'installer.step2.manualInstall.info':'By not using SSH to connect to the target hosts, you must manually install and start the ' +
'Ambari Agent on each host in order for the wizard to perform the necessary configurations and software installs.',
- 'installer.step2.advancedOption': 'Advanced Options',
- 'installer.step2.repoConf': 'Software Repository Configuration File Path',
- 'installer.step2.localRepo.header': 'Software Repository',
- 'installer.step2.localRepo.label': 'Use a local software repository',
- 'installer.step2.localRepo.error.required': 'Local repository file path is required',
- 'installer.step2.localRepo.info': 'The repository configuration file should be installed on each host in your cluster. ' +
+ 'installer.step2.advancedOption':'Advanced Options',
+ 'installer.step2.repoConf':'Software Repository Configuration File Path',
+ 'installer.step2.localRepo.header':'Software Repository',
+ 'installer.step2.localRepo.label':'Use a local software repository',
+ 'installer.step2.localRepo.error.required':'Local repository file path is required',
+ 'installer.step2.localRepo.info':'The repository configuration file should be installed on each host in your cluster. ' +
'This file instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
'downloading them from the internet.',
- 'installer.step2.localRepo.tooltip.title': 'Local Software Repository',
- 'installer.step2.localRepo.tooltip.content': 'The repository configuration file should be installed on each host ' +
+ 'installer.step2.localRepo.tooltip.title':'Local Software Repository',
+ 'installer.step2.localRepo.tooltip.content':'The repository configuration file should be installed on each host ' +
'in your cluster. This file instructs package manager to use your local' +
'software repository to retrieve software packages, instead of using the internet.',
- 'installer.step2.manualInstall.tooltip.title': 'Not Using SSH (Manual Install)',
- 'installer.step2.manualInstall.tooltip.content': 'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
+ 'installer.step2.manualInstall.tooltip.title':'Not Using SSH (Manual Install)',
+ 'installer.step2.manualInstall.tooltip.content':'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
' you have the option of configuring them yourself. This involves installing and starting Ambari Agent on each of your target hosts.',
- 'installer.step2.manualInstall.popup.header': 'Before You Proceed',
- 'installer.step2.manualInstall.popup.body': 'You must install Ambari Agents on each host you want to manage before you proceed. <a href="#" target="_blank">Learn more</a>',
+ 'installer.step2.manualInstall.popup.header':'Before You Proceed',
+ 'installer.step2.manualInstall.popup.body':'You must install Ambari Agents on each host you want to manage before you proceed. <a href="#" target="_blank">Learn more</a>',
- 'installer.step3.header': 'Confirm Hosts',
- 'installer.step3.body': 'Here are the results of the host discovery process.<br>' +
+ 'installer.step3.header':'Confirm Hosts',
+ 'installer.step3.body':'Here are the results of the host discovery process.<br>' +
'Please verify and remove the ones that you do not want to be part of the cluster.',
- 'installer.step3.hostLog.popup.header': 'Log file for the host',
- 'installer.step3.hostLog.popup.body': 'Placeholder for the log file',
- 'installer.step3.hosts.remove.popup.header': 'Remove Hosts',
- 'installer.step3.hosts.remove.popup.body': 'Are you sure you want to remove the selected host(s)?',
- 'installer.step3.hosts.retry.popup.header': 'Retry Host Discovery',
- 'installer.step3.hosts.retry.popup.body': 'Are you sure you want to retry discovery of the selected host(s)?',
-
- 'installer.step4.header': 'Choose Services',
- 'installer.step4.body': 'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
- 'installer.step4.mapreduceCheck.popup.header': 'MapReduce Needed',
- 'installer.step4.mapreduceCheck.popup.body': 'You did not select MapReduce, but it is needed by other services you selected. We will automatically add MapReduce. Is this OK?',
- 'installer.step4.monitoringCheck.popup.header': 'Limited Functionality Warning',
- 'installer.step4.monitoringCheck.popup.body': 'You did not select Nagios and/or Ganglia. If both are not selected, monitoring and alerts will not function properly. Is this OK?',
-
- 'installer.step5.header': 'Assign Masters',
- 'installer.step5.attention': ' hosts not running master services',
- 'installer.step5.body': 'Assign master components to hosts you want to run them on.',
-
- 'installer.step6.header': 'Assign Slaves and Clients',
- 'installer.step6.body': 'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
- 'installer.step6.error.mustSelectOne': 'You must assign at least one host to each.',
-
- 'installer.step7.header': 'Customize Services',
- 'installer.step7.body': 'We have come up with recommended configurations for the services you selected. Customize them as you see fit.',
- 'installer.step7.attentionNeeded': '<strong>Attention:</strong> Some configurations need your attention before you can proceed.',
-
- 'installer.step8.header': 'Review',
- 'installer.step8.body': 'Please review the cluster configuration before installation',
-
- 'installer.step9.header': 'Install, Start and Test',
- 'installer.step9.body': 'Please wait while the selected services are installed, started, and tested on your new cluster.',
- 'installer.step9.status.success': 'Successfully installed the cluster',
- 'installer.step9.status.failed': 'Failure in installation',
- 'installer.step9.host.status.success': 'Success',
- 'installer.step9.host.status.warning': 'Warnings encountered',
- 'installer.step9.host.status.failed': 'Failures encountered',
- 'installer.step9.hostLog.popup.header': 'Tasks executed on ',
-
- 'installer.step10.header': 'Summary',
- 'installer.step10.body': 'Here is the summary of the cluster install process.',
-
-
- 'form.create': 'Create',
- 'form.save': 'Save',
- 'form.cancel': 'Cancel',
- 'form.password': 'Password',
- 'form.passwordRetype': 'Retype Password',
- 'form.saveSuccess': 'Successfully saved.',
- 'form.saveError': 'Sorry, errors occured.',
-
- 'form.validator.invalidIp': 'Please enter valid ip address',
-
- 'admin.advanced.title': 'Advanced',
- 'admin.advanced.caution': 'This section is for advanced user only.<br/>Proceed with caution.',
- 'admin.advanced.button.uninstallIncludingData': 'Uninstall cluster including all data.',
- 'admin.advanced.button.uninstallKeepData': 'Uninstall cluster but keep data.',
-
- 'admin.advanced.popup.header': 'Uninstall Cluster',
+ 'installer.step3.hostLog.popup.header':'Log file for the host',
+ 'installer.step3.hostLog.popup.body':'Placeholder for the log file',
+ 'installer.step3.hosts.remove.popup.header':'Remove Hosts',
+ 'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?',
+ 'installer.step3.hosts.retry.popup.header':'Retry Host Discovery',
+ 'installer.step3.hosts.retry.popup.body':'Are you sure you want to retry discovery of the selected host(s)?',
+
+ 'installer.step4.header':'Choose Services',
+ 'installer.step4.body':'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
+ 'installer.step4.mapreduceCheck.popup.header':'MapReduce Needed',
+ 'installer.step4.mapreduceCheck.popup.body':'You did not select MapReduce, but it is needed by other services you selected. We will automatically add MapReduce. Is this OK?',
+ 'installer.step4.monitoringCheck.popup.header':'Limited Functionality Warning',
+ 'installer.step4.monitoringCheck.popup.body':'You did not select Nagios and/or Ganglia. If both are not selected, monitoring and alerts will not function properly. Is this OK?',
+
+ 'installer.step5.header':'Assign Masters',
+ 'installer.step5.attention':' hosts not running master services',
+ 'installer.step5.body':'Assign master components to hosts you want to run them on.',
+
+ 'installer.step6.header':'Assign Slaves and Clients',
+ 'installer.step6.body':'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
+ 'installer.step6.error.mustSelectOne':'You must assign at least one host to each.',
+
+ 'installer.step7.header':'Customize Services',
+ 'installer.step7.body':'We have come up with recommended configurations for the services you selected. Customize them as you see fit.',
+ 'installer.step7.attentionNeeded':'<strong>Attention:</strong> Some configurations need your attention before you can proceed.',
+
+ 'installer.step8.header':'Review',
+ 'installer.step8.body':'Please review the cluster configuration before installation',
+
+ 'installer.step9.header':'Install, Start and Test',
+ 'installer.step9.body':'Please wait while the selected services are installed, started, and tested on your new cluster.',
+ 'installer.step9.status.success':'Successfully installed the cluster',
+ 'installer.step9.status.failed':'Failure in installation',
+ 'installer.step9.host.status.success':'Success',
+ 'installer.step9.host.status.warning':'Warnings encountered',
+ 'installer.step9.host.status.failed':'Failures encountered',
+ 'installer.step9.hostLog.popup.header':'Tasks executed on ',
+
+ 'installer.step10.header':'Summary',
+ 'installer.step10.body':'Here is the summary of the cluster install process.',
+
+
+ 'form.create':'Create',
+ 'form.save':'Save',
+ 'form.cancel':'Cancel',
+ 'form.password':'Password',
+ 'form.passwordRetype':'Retype Password',
+ 'form.saveSuccess':'Successfully saved.',
+ 'form.saveError':'Sorry, errors occured.',
+
+ 'form.validator.invalidIp':'Please enter valid ip address',
+
+ 'admin.advanced.title':'Advanced',
+ 'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.',
+ 'admin.advanced.button.uninstallIncludingData':'Uninstall cluster including all data.',
+ 'admin.advanced.button.uninstallKeepData':'Uninstall cluster but keep data.',
+
+ 'admin.advanced.popup.header':'Uninstall Cluster',
/*'admin.advanced.popup.text':'Uninstall Cluster',*/
- 'admin.audit.grid.date': "Date/Time",
- 'admin.audit.grid.category': "Category",
- 'admin.audit.grid.operationName': "Operation",
- 'admin.audit.grid.performedBy': "Performed By",
- 'admin.audit.grid.service': "Category",
-
- 'admin.authentication.form.method.database': 'Use Ambari Database to authenticate users',
- 'admin.authentication.form.method.ldap': 'Use LDAP/Active Directory to authenticate',
- 'admin.authentication.form.primaryServer': 'Primary Server',
- 'admin.authentication.form.secondaryServer': 'Secondary Server',
- 'admin.authentication.form.useSsl': 'Use SSL',
- 'admin.authentication.form.bind.anonymously': "Bind Anonymously",
- 'admin.authentication.form.bind.useCrenedtials': "Use Credentials To Bind",
- 'admin.authentication.form.bindUserDN': 'Bind User DN',
- 'admin.authentication.form.searchBaseDN': 'Search Base DN',
- 'admin.authentication.form.usernameAttribute': 'Username Attribute',
-
- 'admin.authentication.form.userDN': 'User DN',
- 'admin.authentication.form.password': 'Password',
- 'admin.authentication.form.configurationTest': 'Configuration Test',
- 'admin.authentication.form.testConfiguration': 'Test Configuration',
-
- 'admin.authentication.form.test.success': 'The configuration passes the test',
- 'admin.authentication.form.test.fail': 'The configuration fails the test',
-
- 'admin.security.title': 'Kerberos Security has not been enabled on this cluster.',
- 'admin.security.button.enable': 'Enable Kerberos Security on this cluster',
-
- 'admin.users.ldapAuthentionUsed': 'LDAP Authentication is being used to authenticate users',
- 'admin.users.deleteYourselfMessage': 'You can\'t delete yourself',
- 'admin.users.addButton': 'Add User',
- 'admin.users.delete': 'delete',
- 'admin.users.edit': 'edit',
- 'admin.users.privileges': 'Admin',
- 'admin.users.password': 'Password',
- 'admin.users.passwordRetype': 'Retype Password',
- 'admin.users.username': 'Username',
-
- 'question.sure': 'Are you sure?',
-
- 'services.service.start': 'Start',
- 'services.service.stop': 'Stop',
- 'services.service.confirmation.header': 'Confirmation',
- 'services.service.confirmation.body': 'Are you sure?',
- 'services.service.summary.version': 'Version',
- 'services.service.summary.nameNode': 'NameNode Web UI',
- 'services.service.summary.nameNodeUptime': 'NameNode Uptime',
- 'services.service.summary.nameNodeHeap': 'NameNode Heap',
- 'services.service.summary.pendingUpgradeStatus': 'Upgrade Status',
- 'services.service.summary.safeModeStatus': 'Safe Mode Status',
- 'services.service.summary.dataNodes': 'DataNodes',
- 'services.service.summary.diskCapacity': 'HDFS Disk Capacity',
- 'services.service.summary.blocksTotal': 'Blocks (total)',
- 'services.service.summary.blockErrors': 'Block Errors',
- 'services.service.summary.totalFiles': 'Total Files + Dirs',
- 'services.service.summary.jobTracker': 'JobTracker',
- 'services.service.summary.jobTrackerWebUI': 'JobTracker Web UI',
- 'services.service.summary.jobTrackerUptime': 'JobTracker Uptime',
- 'services.service.summary.trackersLiveTotal': 'Trackers',
- 'services.service.summary.trackersBlacklistGraylist': 'Trackers',
- 'services.service.summary.jobTrackerHeap': 'JobTracker Heap',
- 'services.service.summary.totalSlotsCapacity': 'Total Slots Capacity',
- 'services.service.summary.totalJobs': 'Total Jobs',
- 'services.service.summary.currentSlotUtiliMaps': 'Map Slots',
- 'services.service.summary.currentSlotUtiliReduces': 'Reduce Slots',
- 'services.service.summary.tasksMaps': 'Tasks: Maps',
- 'services.service.summary.tasksReduces': 'Tasks: Reduces',
- 'services.service.summary.hbaseMaster': 'HBase Master Web UI',
- 'services.service.summary.regionServerCount': 'Region Server Count',
- 'services.service.summary.regionInTransition': 'Region In Transition',
- 'services.service.summary.masterStarted': 'Master Started',
- 'services.service.summary.masterActivated': 'Master Activated',
- 'services.service.summary.averageLoad': 'Average Load',
- 'services.service.summary.masterHeap': 'Master Heap',
- 'services.service.summary.moreStats': 'more stats here',
- 'services.service.actions.run.rebalancer': 'Run Rebalancer',
- 'services.service.actions.run.compaction': 'Run Compaction',
- 'services.service.actions.run.smoke': 'Run Smoke Test',
- 'services.service.actions.maintenance': 'Maintenance',
-
- 'services.add.header': 'Add Service Wizard',
-
- 'host.singular': 'host',
- 'host.plural': 'hosts',
-
- 'hosts.host.start.popup.header': 'Confirmation',
- 'hosts.host.stop.popup.header': 'Confirmation',
- 'hosts.host.start.popup.body': 'Are you sure?',
- 'hosts.host.stop.popup.body': 'Are you sure?',
- 'hosts.assignedToRack.popup.body': 'Are you sure?',
- 'hosts.assignedToRack.popup.header': 'Confirmation',
- 'hosts.decommission.popup.body': 'Are you sure?',
- 'hosts.decommission.popup.header': 'Confirmation',
- 'hosts.delete.popup.body': 'Are you sure?',
- 'hosts.delete.popup.header': 'Confirmation',
- 'hosts.cant.do.popup.header': 'Operation not allowed',
- 'hosts.cant.do.popup.masterList.body': 'You cannot delete this host because it is hosting following master services: {0}.',
- 'hosts.cant.do.popup.workingList.body': 'You cannot delete this host because following slave services are not fully stopped or decommissioned: {0}.',
- 'hosts.assignToRack.sure': 'Sure you want to assign {0} to {1}?',
- 'hosts.add.header': 'Add Host Wizard',
- 'hosts.add.step2.warning': 'Hosts are already part of the cluster and will be ignored',
- 'hosts.assignRack': 'Assign Rack',
-
- 'charts.horizon.chart.showText': 'show',
- 'charts.horizon.chart.hideText': 'hide',
- 'charts.horizon.chart.attributes.cpu': 'CPU',
- 'charts.horizon.chart.attributes.memory': 'Memory',
- 'charts.horizon.chart.attributes.network': 'Network',
- 'charts.horizon.chart.attributes.io': 'I/O',
+ 'admin.audit.grid.date':"Date/Time",
+ 'admin.audit.grid.category':"Category",
+ 'admin.audit.grid.operationName':"Operation",
+ 'admin.audit.grid.performedBy':"Performed By",
+ 'admin.audit.grid.service':"Category",
+
+ 'admin.authentication.form.method.database':'Use Ambari Database to authenticate users',
+ 'admin.authentication.form.method.ldap':'Use LDAP/Active Directory to authenticate',
+ 'admin.authentication.form.primaryServer':'Primary Server',
+ 'admin.authentication.form.secondaryServer':'Secondary Server',
+ 'admin.authentication.form.useSsl':'Use SSL',
+ 'admin.authentication.form.bind.anonymously':"Bind Anonymously",
+ 'admin.authentication.form.bind.useCrenedtials':"Use Credentials To Bind",
+ 'admin.authentication.form.bindUserDN':'Bind User DN',
+ 'admin.authentication.form.searchBaseDN':'Search Base DN',
+ 'admin.authentication.form.usernameAttribute':'Username Attribute',
+
+ 'admin.authentication.form.userDN':'User DN',
+ 'admin.authentication.form.password':'Password',
+ 'admin.authentication.form.configurationTest':'Configuration Test',
+ 'admin.authentication.form.testConfiguration':'Test Configuration',
+
+ 'admin.authentication.form.test.success':'The configuration passes the test',
+ 'admin.authentication.form.test.fail':'The configuration fails the test',
+
+ 'admin.security.title':'Kerberos Security has not been enabled on this cluster.',
+ 'admin.security.button.enable':'Enable Kerberos Security on this cluster',
+
+ 'admin.users.ldapAuthentionUsed':'LDAP Authentication is being used to authenticate users',
+ 'admin.users.delete.yourself.message':'You can\'t delete yourself',
+ 'admin.users.delete.yourself.header':'Deleting warning',
+
+ 'admin.users.delete.header':'Delete {0}',
+
+ 'admin.users.addButton':'Add Local User',
+ 'admin.users.delete':'delete',
+ 'admin.users.edit':'edit',
+ 'admin.users.privileges':'Admin',
+ 'admin.users.type':'Type',
+ 'admin.users.action':'Action',
+ 'admin.users.password':'Password',
+ 'admin.users.passwordRetype':'Retype Password',
+ 'admin.users.username':'Username',
+
+ 'question.sure':'Are you sure?',
+ 'yes':'Yes',
+ 'no':'No',
+
+ 'services.service.start':'Start',
+ 'services.service.stop':'Stop',
+ 'services.service.confirmation.header':'Confirmation',
+ 'services.service.confirmation.body':'Are you sure?',
+ 'services.service.summary.version':'Version',
+ 'services.service.summary.nameNode':'NameNode Web UI',
+ 'services.service.summary.nameNodeUptime':'NameNode Uptime',
+ 'services.service.summary.nameNodeHeap':'NameNode Heap',
+ 'services.service.summary.pendingUpgradeStatus':'Upgrade Status',
+ 'services.service.summary.safeModeStatus':'Safe Mode Status',
+ 'services.service.summary.dataNodes':'DataNodes',
+ 'services.service.summary.diskCapacity':'HDFS Disk Capacity',
+ 'services.service.summary.blocksTotal':'Blocks (total)',
+ 'services.service.summary.blockErrors':'Block Errors',
+ 'services.service.summary.totalFiles':'Total Files + Dirs',
+ 'services.service.summary.jobTracker':'JobTracker',
+ 'services.service.summary.jobTrackerWebUI':'JobTracker Web UI',
+ 'services.service.summary.jobTrackerUptime':'JobTracker Uptime',
+ 'services.service.summary.trackersLiveTotal':'Trackers',
+ 'services.service.summary.trackersBlacklistGraylist':'Trackers',
+ 'services.service.summary.jobTrackerHeap':'JobTracker Heap',
+ 'services.service.summary.totalSlotsCapacity':'Total Slots Capacity',
+ 'services.service.summary.totalJobs':'Total Jobs',
+ 'services.service.summary.currentSlotUtiliMaps':'Map Slots',
+ 'services.service.summary.currentSlotUtiliReduces':'Reduce Slots',
+ 'services.service.summary.tasksMaps':'Tasks: Maps',
+ 'services.service.summary.tasksReduces':'Tasks: Reduces',
+ 'services.service.summary.hbaseMaster':'HBase Master Web UI',
+ 'services.service.summary.regionServerCount':'Region Server Count',
+ 'services.service.summary.regionInTransition':'Region In Transition',
+ 'services.service.summary.masterStarted':'Master Started',
+ 'services.service.summary.masterActivated':'Master Activated',
+ 'services.service.summary.averageLoad':'Average Load',
+ 'services.service.summary.masterHeap':'Master Heap',
+ 'services.service.summary.moreStats':'more stats here',
+ 'services.service.actions.run.rebalancer':'Run Rebalancer',
+ 'services.service.actions.run.compaction':'Run Compaction',
+ 'services.service.actions.run.smoke':'Run Smoke Test',
+ 'services.service.actions.maintenance':'Maintenance',
+
+ 'services.add.header':'Add Service Wizard',
+
+ 'host.singular':'host',
+ 'host.plural':'hosts',
+
+ 'hosts.host.start.popup.header':'Confirmation',
+ 'hosts.host.stop.popup.header':'Confirmation',
+ 'hosts.host.start.popup.body':'Are you sure?',
+ 'hosts.host.stop.popup.body':'Are you sure?',
+ 'hosts.assignedToRack.popup.body':'Are you sure?',
+ 'hosts.assignedToRack.popup.header':'Confirmation',
+ 'hosts.decommission.popup.body':'Are you sure?',
+ 'hosts.decommission.popup.header':'Confirmation',
+ 'hosts.delete.popup.body':'Are you sure?',
+ 'hosts.delete.popup.header':'Confirmation',
+ 'hosts.cant.do.popup.header':'Operation not allowed',
+ 'hosts.cant.do.popup.masterList.body':'You cannot delete this host because it is hosting following master services: {0}.',
+ 'hosts.cant.do.popup.workingList.body':'You cannot delete this host because following slave services are not fully stopped or decommissioned: {0}.',
+ 'hosts.assignToRack.sure':'Sure you want to assign {0} to {1}?',
+ 'hosts.add.header':'Add Host Wizard',
+ 'hosts.add.step2.warning':'Hosts are already part of the cluster and will be ignored',
+ 'hosts.assignRack':'Assign Rack',
+
+ 'charts.horizon.chart.showText':'show',
+ 'charts.horizon.chart.hideText':'hide',
+ 'charts.horizon.chart.attributes.cpu':'CPU',
+ 'charts.horizon.chart.attributes.memory':'Memory',
+ 'charts.horizon.chart.attributes.network':'Network',
+ 'charts.horizon.chart.attributes.io':'I/O',
'metric.default':'combined',
'metric.cpu':'cpu',
@@ -266,70 +274,70 @@ Em.I18n.translations = {
'metric.io':'io',
'metric.more':'more',
'metric.more.cpu':'CPU',
- 'metric.more.disk': 'Disk',
- 'metric.more.load': 'Load',
+ 'metric.more.disk':'Disk',
+ 'metric.more.load':'Load',
'metric.more.memory':'Memory',
- 'metric.more.network': 'Network',
- 'metric.more.process': 'Process',
-
- 'dashboard.services': 'Services',
- 'dashboard.services.hosts': 'Hosts',
- 'dashboard.services.uptime': '{0} days {1} hrs {2} mins',
- 'dashboard.services.hdfs.summary': '{0} of {1} nodes live, {2}% capacity free',
- 'dashboard.services.hdfs.nanmenode': 'NameNode',
- 'dashboard.services.hdfs.snanmenode': 'Secondary NameNode',
- 'dashboard.services.hdfs.capacity': 'HDFS Disk Capacity',
- 'dashboard.services.hdfs.capacityUsed': '{0} / {1} ({2}% used)',
- 'dashboard.services.hdfs.totalFilesAndDirs': 'Total Files + Directories',
- 'dashboard.services.hdfs.datanodes': 'DataNodes',
- 'dashboard.services.hdfs.datanodecounts': 'DataNodes Status',
- 'dashboard.services.hdfs.version': 'Version',
- 'dashboard.services.hdfs.nameNodeWebUI': 'NameNode Web UI',
- 'dashboard.services.hdfs.nodes.live': 'live',
- 'dashboard.services.hdfs.nodes.dead': 'dead',
- 'dashboard.services.hdfs.nodes.decom': 'decom',
- 'dashboard.services.hdfs.nodes.uptime': 'NameNode Uptime',
- 'dashboard.services.hdfs.nodes.heap': 'NameNode Heap',
- 'dashboard.services.hdfs.nodes.heapUsed': '{0} / {1} ({2}% used)',
- 'dashboard.services.hdfs.chart.label': 'Capacity (Free/Used)',
-
- 'dashboard.services.mapreduce.summary': '{0} of {1} trackers live, {2} jobs running, {3} jobs waiting',
- 'dashboard.services.mapreduce.taskTrackers': 'TaskTrackers',
- 'dashboard.services.mapreduce.taskTrackerCounts': 'TaskTrackers Status',
- 'dashboard.services.mapreduce.trackers': 'Trackers',
- 'dashboard.services.mapreduce.nodes.blacklist': 'blacklist',
- 'dashboard.services.mapreduce.nodes.graylist': 'graylist',
- 'dashboard.services.mapreduce.slotCapacity': 'Total Slots Capacity',
- 'dashboard.services.mapreduce.trackersSummary': '{0} live / {1} total',
- 'dashboard.services.mapreduce.jobs': 'Total Jobs',
- 'dashboard.services.mapreduce.jobsSummary': '{0} submitted / {1} completed',
- 'dashboard.services.mapreduce.mapSlots': 'Map Slots',
- 'dashboard.services.mapreduce.mapSlotsSummary': '{0} occuped / {1} reserved',
- 'dashboard.services.mapreduce.reduceSlots': 'Reduce Slots',
- 'dashboard.services.mapreduce.tasks.maps': 'Tasks: Maps',
- 'dashboard.services.mapreduce.tasks.reduces': 'Tasks: Reduces',
- 'dashboard.services.mapreduce.reduceSlotsSummary': '{0} occuped / {1} reserved',
- 'dashboard.services.mapreduce.tasksSummary': '{0} running / {1} waiting',
- 'dashboard.services.mapreduce.slotCapacitySummary': '{0} maps / {1} reduces / {2} avg per node',
- 'dashboard.services.mapreduce.jobTrackerHeap': 'JobTracker Heap',
- 'dashboard.services.mapreduce.jobTrackerHeapSummary': '{0} of {1} ({2}% used)',
- 'dashboard.services.mapreduce.jobTrackerUptime': 'Job Trackers Uptime',
- 'dashboard.services.mapreduce.chart.label': 'Jobs Running',
-
- 'dashboard.services.hbase.summary': '{0} of {1} region servers up, {2} average load',
- 'dashboard.services.hbase.masterServerHeap': 'Master Server Heap',
- 'dashboard.services.hbase.masterServerHeap.summary': '{0} of {1} ({2}% used)',
- 'dashboard.services.hbase.masterServerUptime': 'Master Server Uptime',
- 'dashboard.services.hbase.averageLoad': 'Average Load',
- 'dashboard.services.hbase.regionServers': 'Region Servers',
- 'dashboard.services.hbase.regionServersSummary': '{0} live / {1} total',
- 'dashboard.services.hbase.chart.label': 'Request Count',
-
-
- 'timeRange.presets.1hour': '1h',
- 'timeRange.presets.12hour': '12h',
- 'timeRange.presets.1day': '1d',
- 'timeRange.presets.1week': '1wk',
- 'timeRange.presets.1month': '1mo',
- 'timeRange.presets.1year': '1yr'
+ 'metric.more.network':'Network',
+ 'metric.more.process':'Process',
+
+ 'dashboard.services':'Services',
+ 'dashboard.services.hosts':'Hosts',
+ 'dashboard.services.uptime':'{0} days {1} hrs {2} mins',
+ 'dashboard.services.hdfs.summary':'{0} of {1} nodes live, {2}% capacity free',
+ 'dashboard.services.hdfs.nanmenode':'NameNode',
+ 'dashboard.services.hdfs.snanmenode':'Secondary NameNode',
+ 'dashboard.services.hdfs.capacity':'HDFS Disk Capacity',
+ 'dashboard.services.hdfs.capacityUsed':'{0} / {1} ({2}% used)',
+ 'dashboard.services.hdfs.totalFilesAndDirs':'Total Files + Directories',
+ 'dashboard.services.hdfs.datanodes':'DataNodes',
+ 'dashboard.services.hdfs.datanodecounts':'DataNodes Status',
+ 'dashboard.services.hdfs.version':'Version',
+ 'dashboard.services.hdfs.nameNodeWebUI':'NameNode Web UI',
+ 'dashboard.services.hdfs.nodes.live':'live',
+ 'dashboard.services.hdfs.nodes.dead':'dead',
+ 'dashboard.services.hdfs.nodes.decom':'decom',
+ 'dashboard.services.hdfs.nodes.uptime':'NameNode Uptime',
+ 'dashboard.services.hdfs.nodes.heap':'NameNode Heap',
+ 'dashboard.services.hdfs.nodes.heapUsed':'{0} / {1} ({2}% used)',
+ 'dashboard.services.hdfs.chart.label':'Capacity (Free/Used)',
+
+ 'dashboard.services.mapreduce.summary':'{0} of {1} trackers live, {2} jobs running, {3} jobs waiting',
+ 'dashboard.services.mapreduce.taskTrackers':'TaskTrackers',
+ 'dashboard.services.mapreduce.taskTrackerCounts':'TaskTrackers Status',
+ 'dashboard.services.mapreduce.trackers':'Trackers',
+ 'dashboard.services.mapreduce.nodes.blacklist':'blacklist',
+ 'dashboard.services.mapreduce.nodes.graylist':'graylist',
+ 'dashboard.services.mapreduce.slotCapacity':'Total Slots Capacity',
+ 'dashboard.services.mapreduce.trackersSummary':'{0} live / {1} total',
+ 'dashboard.services.mapreduce.jobs':'Total Jobs',
+ 'dashboard.services.mapreduce.jobsSummary':'{0} submitted / {1} completed',
+ 'dashboard.services.mapreduce.mapSlots':'Map Slots',
+ 'dashboard.services.mapreduce.mapSlotsSummary':'{0} occupied / {1} reserved',
+ 'dashboard.services.mapreduce.reduceSlots':'Reduce Slots',
+ 'dashboard.services.mapreduce.tasks.maps':'Tasks: Maps',
+ 'dashboard.services.mapreduce.tasks.reduces':'Tasks: Reduces',
+ 'dashboard.services.mapreduce.reduceSlotsSummary':'{0} occuped / {1} reserved',
+ 'dashboard.services.mapreduce.tasksSummary':'{0} running / {1} waiting',
+ 'dashboard.services.mapreduce.slotCapacitySummary':'{0} maps / {1} reduces / {2} avg per node',
+ 'dashboard.services.mapreduce.jobTrackerHeap':'JobTracker Heap',
+ 'dashboard.services.mapreduce.jobTrackerHeapSummary':'{0} of {1} ({2}% used)',
+ 'dashboard.services.mapreduce.jobTrackerUptime':'Job Trackers Uptime',
+ 'dashboard.services.mapreduce.chart.label':'Jobs Running',
+
+ 'dashboard.services.hbase.summary':'{0} of {1} region servers up, {2} average load',
+ 'dashboard.services.hbase.masterServerHeap':'Master Server Heap',
+ 'dashboard.services.hbase.masterServerHeap.summary':'{0} of {1} ({2}% used)',
+ 'dashboard.services.hbase.masterServerUptime':'Master Server Uptime',
+ 'dashboard.services.hbase.averageLoad':'Average Load',
+ 'dashboard.services.hbase.regionServers':'Region Servers',
+ 'dashboard.services.hbase.regionServersSummary':'{0} live / {1} total',
+ 'dashboard.services.hbase.chart.label':'Request Count',
+
+
+ 'timeRange.presets.1hour':'1h',
+ 'timeRange.presets.12hour':'12h',
+ 'timeRange.presets.1day':'1d',
+ 'timeRange.presets.1week':'1wk',
+ 'timeRange.presets.1month':'1mo',
+ 'timeRange.presets.1year':'1yr'
}; \ No newline at end of file
diff --git a/ambari-web/app/models/form.js b/ambari-web/app/models/form.js
index 9a463c381c..61b99392e0 100644
--- a/ambari-web/app/models/form.js
+++ b/ambari-web/app/models/form.js
@@ -23,30 +23,35 @@ App.Form = Em.View.extend({
/**
* generating fields from fieldsOptions
*/
- classNames: ["form-horizontal"],
- i18nprefix: 'form.',
- fields: [],
- field: {},
- messages: [],
- object: false,
- result: 0, // save result var (-1 - error; 0 - init; 1 - success)
- templateName: require('templates/common/form'),
- tagName: 'form',
-
- init: function () {
- this._super();
+ classNames:["form-horizontal"],
+ i18nprefix:'form.',
+ fields:[],
+ field:{},
+ messages:[],
+ object:false,
+ result:0, // save result var (-1 - error; 0 - init; 1 - success)
+ templateName:require('templates/common/form'),
+ tagName:'form',
+
+ init:function () {
var thisForm = this;
- if (!this.fields.length)
- $.each(this.fieldsOptions,
- function () {
- var field = App.FormField.create(this);
+ console.warn("FIELDS LEN:", this.fields.length);
+
+ if (!this.fields.length) {
+ this.fieldsOptions.forEach(
+ function (options) {
+ var field = App.FormField.create(options);
+ console.warn("CREATED FIELD VALUE:", field.get('value'));
field.set('form', thisForm);
thisForm.fields.push(field);
thisForm.set("field." + field.get('name'), field);
- });
+ }
+ );
+ }
+ this._super();
},
- getField: function (name) {
+ getField:function (name) {
var field = false;
$.each(this.fields, function () {
if (this.get('name') == name) {
@@ -56,7 +61,7 @@ App.Form = Em.View.extend({
return field;
},
- isValid: function () {
+ isValid:function () {
var isValid = true;
$.each(this.fields, function () {
this.validate();
@@ -69,12 +74,15 @@ App.Form = Em.View.extend({
return isValid;
},
- isObjectNew: function () {
+ isObjectNew:function () {
var object = this.get('object');
+ if(object instanceof App.User){
+ return false;
+ }
return !(object instanceof DS.Model && object.get('id'));
}.property("object"),
- updateValues: function () {
+ updateValues:function () {
var object = this.get('object');
if (object instanceof Em.Object) {
$.each(this.fields, function () {
@@ -90,16 +98,17 @@ App.Form = Em.View.extend({
*
*/
- getValues: function () {
+ getValues:function () {
var values = {};
- $.each(this.fields, function () {
- if (!(this.get('displayType') == 'password' && validator.empty(this.get('value')))) // if this is not empty password field
+ $.each(this.get('fields'), function () {
+ if (!(this.get('displayType') == 'password' && validator.empty(this.get('value')))) { // if this is not empty password field
values[this.get('name')] = this.get('value');
+ }
});
return values;
},
- clearValues: function () {
+ clearValues:function () {
$.each(this.fields, function () {
this.set('value', '');
});
@@ -109,7 +118,7 @@ App.Form = Em.View.extend({
* need to refactor for integration
* @return {Boolean}
*/
- save: function () {
+ save:function () {
var thisForm = this;
var object = this.get('object');
if (!this.get('isObjectNew')) {
@@ -129,7 +138,18 @@ App.Form = Em.View.extend({
return true;
},
- resultText: function () {
+ visibleFields:function () {
+ var fields = this.get('fields');
+ var visible = [];
+ fields.forEach(function (field) {
+ if (!field.get('isHiddenField')) {
+ visible.push(field);
+ }
+ });
+ return visible;
+ }.property('fields'),
+
+ resultText:function () {
var text = "";
switch (this.get('result')) {
case -1:
@@ -143,7 +163,7 @@ App.Form = Em.View.extend({
return text;
}.property('result'),
- saveButtonText: function () {
+ saveButtonText:function () {
return Em.I18n.t(this.get('i18nprefix') + (this.get('isObjectNew') ? "create" : "save"));
}.property('isObjectNew')
@@ -154,24 +174,31 @@ App.Form = Em.View.extend({
});
App.FormField = Em.Object.extend({ // try to realize this as view
- name: '',
- displayName: '',
+ name:'',
+ displayName:'',
// defaultValue:'', NOT REALIZED YET
- description: '',
- disabled: false,
- displayType: 'string', // string, digits, number, directories, textarea, checkbox
- disableRequiredOnPresent: false,
- errorMessage: '',
- form: false,
- isRequired: true, // by default a config property is required
- unit: '',
- value: '',
-
- isValid: function () {
+ description:'',
+ disabled:false,
+ displayType:'string', // string, digits, number, directories, textarea, checkbox
+ disableRequiredOnPresent:false,
+ errorMessage:'',
+ form:false,
+ isRequired:true, // by default a config property is required
+ unit:'',
+ value:'',
+
+ observeValue:function () {
+
+ if (this.get('displayType') == 'hidden')
+ console.warn(" FORM FIELD VALUE: ", this.get('value'));
+
+ }.observes('value'),
+
+ isValid:function () {
return this.get('errorMessage') === '';
}.property('errorMessage'),
- viewClass: function () {
+ viewClass:function () {
var options = {};
var element = Em.TextField;
switch (this.get('displayType')) {
@@ -192,12 +219,15 @@ App.FormField = Em.Object.extend({ // try to realize this as view
case 'textarea':
element = Em.TextArea;
break;
+ case 'hidden':
+ options.type = "hidden";
+ break;
}
return element.extend(options);
}.property('displayType'),
- validate: function () {
+ validate:function () {
var digitsRegex = /^\d+$/;
var numberRegex = /^[-,+]?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/;
var value = this.get('value');
@@ -260,5 +290,9 @@ App.FormField = Em.Object.extend({ // try to realize this as view
if (!isError) {
this.set('errorMessage', '');
}
- }.observes('value')
+ }.observes('value'),
+
+ isHiddenField:function () {
+ return this.get('displayType') == 'hidden';
+ }.property('type')
}); \ No newline at end of file
diff --git a/ambari-web/app/models/host.js b/ambari-web/app/models/host.js
index bd521b9306..6b8cff4599 100644
--- a/ambari-web/app/models/host.js
+++ b/ambari-web/app/models/host.js
@@ -18,6 +18,7 @@
var App = require('app');
+var misc = require('utils/misc');
App.Host = DS.Model.extend({
hostName: DS.attr('string'),
@@ -27,7 +28,7 @@ App.Host = DS.Model.extend({
memory: DS.attr('string'),
diskUsage: DS.attr('string'),
loadAvg: DS.attr('string'),
- os: DS.attr('string'),
+ osArch: DS.attr('string'),
ip: DS.attr('string'),
healthStatus: DS.attr('string'),
cpuUsage: DS.attr('number'),
@@ -38,7 +39,12 @@ App.Host = DS.Model.extend({
osType: DS.attr("string"),
diskInfo: DS.attr('string'),
-
+ /**
+ * formatted bytes to appropriate value
+ */
+ memoryFormatted: function () {
+ return misc.formatBandwidth(this.get('memory'));
+ }.property('memory'),
/**
* Return true if host not heartbeating last 180 seconds
*/
diff --git a/ambari-web/app/models/run.js b/ambari-web/app/models/run.js
index 92b9079634..ffc11a64aa 100644
--- a/ambari-web/app/models/run.js
+++ b/ambari-web/app/models/run.js
@@ -55,7 +55,6 @@ App.Run = DS.Model.extend({
isRunning: function () {
return !this.get('numJobsTotal') == this.get('numJobsCompleted');
}.property('numJobsTotal', 'numJobsCompleted'),
-
/**
* Sum of input bandwidth for all jobs with appropriate measure
*/
@@ -85,7 +84,21 @@ App.Run = DS.Model.extend({
*/
lastUpdateTimeFormatted: function() {
return date.dateFormat(this.get('lastUpdateTime'));
- }.property('lastUpdateTime')
+ }.property('lastUpdateTime'),
+ /**
+ * Type value based on first part of id
+ */
+ type: function() {
+ if (this.get('id').indexOf('pig_') === 0) {
+ return 'Pig';
+ }
+ if (this.get('id').indexOf('hive_') === 0) {
+ return 'Hive';
+ }
+ if (this.get('id').indexOf('mr_') === 0) {
+ return 'mapReduce';
+ }
+ }.property('id')
});
App.Run.FIXTURES = [];
diff --git a/ambari-web/app/models/service/mapreduce.js b/ambari-web/app/models/service/mapreduce.js
index 207173a04a..74f928411a 100644
--- a/ambari-web/app/models/service/mapreduce.js
+++ b/ambari-web/app/models/service/mapreduce.js
@@ -38,7 +38,8 @@ App.MapReduceService = App.Service.extend({
mapsRunning: DS.attr('number'),
mapsWaiting: DS.attr('number'),
reducesRunning: DS.attr('number'),
- reducesWaiting: DS.attr('number')
+ reducesWaiting: DS.attr('number'),
+ trackersDecommisioned: DS.attr('number')
});
App.MapReduceService.FIXTURES = [];
diff --git a/ambari-web/app/models/user.js b/ambari-web/app/models/user.js
index f0573293e6..fe39d889c5 100644
--- a/ambari-web/app/models/user.js
+++ b/ambari-web/app/models/user.js
@@ -26,17 +26,17 @@ App.UserModel = Em.Object.extend({
App.User = DS.Model.extend({
userName:DS.attr('string'),
- password:DS.attr('string'),
roles:DS.attr('string'),
+ type:DS.attr('string'),
auditItems:DS.hasMany('App.ServiceAudit'),
- admin: function () {
+ admin:function () {
return !!(/^admin/.test(this.get('roles')))
}.property('userName')
});
App.UserForm = App.Form.extend({
className:App.User,
- object: function(){
+ object:function () {
return App.router.get('mainAdminUserEditController.content');
}.property('App.router.mainAdminUserEditController.content'),
@@ -44,7 +44,8 @@ App.UserForm = App.Form.extend({
{ name:"userName", displayName:"Username" },
{ name:"password", displayName:"Password", displayType:"password", isRequired: function(){ return this.get('form.isObjectNew'); }.property('form.isObjectNew') },
{ name:"passwordRetype", displayName:"Retype Password", displayType:"password", validator:"passwordRetype", isRequired: false },
- { name:"admin", displayName:"Admin", displayType:"checkbox", isRequired:false }
+ { name:"admin", displayName:"Admin", displayType:"checkbox", isRequired:false },
+ { name:"roles", displayName:"Role", isRequired:false, isHidden:true }
],
fields:[],
disableUsername:function () {
@@ -61,64 +62,70 @@ App.UserForm = App.Form.extend({
}
}.observes('isObjectNew'),
- isValid: function(){
+ getValues:function () {
+ var values = this._super();
+ values.type = ['local'];
+ return values;
+ },
+
+ isValid:function () {
var isValid = this._super();
thisForm = this;
var passField = this.get('field.password');
var passRetype = this.get('field.passwordRetype');
- if(!validator.empty(passField.get('value'))) {
- if(passField.get('value') != passRetype.get('value')) {
+ if (!validator.empty(passField.get('value'))) {
+ if (passField.get('value') != passRetype.get('value')) {
passRetype.set('errorMessage', "Passwords are different");
isValid = false;
}
}
- if(isValid && this.get('isObjectNew')) {
+ if (isValid && this.get('isObjectNew')) {
var users = App.User.find();
var userNameField = this.getField('userName');
var userName = userNameField.get('value');
- users.forEach(function(user){
- if(userName == user.get('userName')) {
+ users.forEach(function (user) {
+ if (userName == user.get('userName')) {
userNameField.set('errorMessage', 'User with the same name is already exists');
return isValid = false;
}
});
}
-
+
return isValid;
}
});
App.User.FIXTURES = [];
/*
-App.User.FIXTURES = [
- {
- id:1,
- user_name:'admin',
- password:'admin',
- admin:1
- },
- {
- id:2,
- user_name:'vrossi',
- admin:1
- },
- {
- id:3,
- user_name:'casey.stoner',
- admin:0
- },
- {
- id:4,
- user_name:'danip',
- admin:0
- },
- {
- id:5,
- user_name:'test',
- password:'test',
- admin:0
- }
-];*/ \ No newline at end of file
+ App.User.FIXTURES = [
+ {
+ id:1,
+ user_name:'admin',
+ password:'admin',
+ admin:1
+ },
+ {
+ id:2,
+ user_name:'vrossi',
+ admin:1
+ },
+ {
+ id:3,
+ user_name:'casey.stoner',
+ admin:0
+ },
+ {
+ id:4,
+ user_name:'danip',
+ admin:0
+ },
+ {
+ id:5,
+ user_name:'test',
+ password:'test',
+ admin:0
+ }
+ ];*/
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index 6401434b3d..ca4f0034e1 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -102,11 +102,18 @@ App.Router = Em.Router.extend({
App.db.setLoginName(loginName);
},
- // that works incorrectly
+ /**
+ * Set user model to local storage
+ * @param user
+ */
setUser: function (user) {
App.db.setUser(user);
},
- // that works incorrectly
+
+ /**
+ * Get user model from local storage
+ * @return {*}
+ */
getUser: function () {
return App.db.getUser();
},
@@ -221,19 +228,14 @@ App.Router = Em.Router.extend({
}
},
- defaultSection: 'installer',
-
getSection: function () {
- var section = App.db.getSection();
- console.log("The section is: " + section);
- var section = localStorage.getItem(this.getLoginName() + 'section');
-
- return section || this.defaultSection;
-
- },
-
- setSection: function (section) {
- App.db.setSection(section);
+ var clusterController = App.router.get('clusterController');
+ clusterController.loadClusterName(false);
+ if (clusterController.get('clusterName')) {
+ return 'main.index';
+ } else {
+ return 'installer';
+ }
},
root: Em.Route.extend({
diff --git a/ambari-web/app/routes/add_host_routes.js b/ambari-web/app/routes/add_host_routes.js
index 0dc34bcc93..bbf1a7b17f 100644
--- a/ambari-web/app/routes/add_host_routes.js
+++ b/ambari-web/app/routes/add_host_routes.js
@@ -132,7 +132,6 @@ module.exports = Em.Route.extend({
addHostController.saveServices(wizardStep4Controller);
addHostController.saveClients(wizardStep4Controller);
App.db.setMasterComponentHosts(undefined);
- App.db.setHostToMasterComponent(undefined);
router.transitionTo('step4');
}
}),
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 16f3016a10..1fe9a231b8 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -50,7 +50,6 @@ module.exports = Em.Route.extend({
addServiceController.saveServices(wizardStep4Controller);
addServiceController.saveClients(wizardStep4Controller);
App.db.setMasterComponentHosts(undefined);
- App.db.setHostToMasterComponent(undefined);
router.transitionTo('step2');
}
}),
@@ -72,6 +71,7 @@ module.exports = Em.Route.extend({
var wizardStep5Controller = router.get('wizardStep5Controller');
addServiceController.saveMasterComponentHosts(wizardStep5Controller);
App.db.setSlaveComponentHosts(undefined);
+ App.db.setHostSlaveComponents(undefined);
router.transitionTo('step3');
}
}),
@@ -92,6 +92,7 @@ module.exports = Em.Route.extend({
if (wizardStep6Controller.validate()) {
addServiceController.saveSlaveComponentHosts(wizardStep6Controller);
+ addServiceController.get('content').set('serviceConfigProperties', null);
App.db.setServiceConfigProperties(null);
router.transitionTo('step4');
}
@@ -140,7 +141,6 @@ module.exports = Em.Route.extend({
connectOutlets: function (router, context) {
console.log('in addService.step6:connectOutlets');
var controller = router.get('addServiceController');
- controller.setInfoForStep9();
controller.setCurrentStep('6', false);
controller.loadAllPriorSteps();
controller.connectOutlet('wizardStep9', controller.get('content'));
@@ -149,13 +149,16 @@ module.exports = Em.Route.extend({
retry: function(router,context) {
var addServiceController = router.get('addSrviceController');
var wizardStep9Controller = router.get('wizardStep9Controller');
- addServiceController.installServices();
- wizardStep9Controller.navigateStep();
+ if (!wizardStep9Controller.get('isSubmitDisabled')) {
+ addServiceController.installServices();
+ addServiceController.setInfoForStep9();
+ wizardStep9Controller.navigateStep();
+ }
},
next: function (router) {
var addServiceController = router.get('addServiceController');
var wizardStep9Controller = router.get('wizardStep9Controller');
- addServiceController.saveClusterInfo(wizardStep9Controller);
+ //addServiceController.saveClusterInfo(wizardStep9Controller);
addServiceController.saveInstalledHosts(wizardStep9Controller);
router.transitionTo('step7');
}
@@ -168,7 +171,7 @@ module.exports = Em.Route.extend({
var controller = router.get('addServiceController');
controller.setCurrentStep('7', false);
controller.loadAllPriorSteps();
- controller.connectOutlet('wizardStep10');
+ controller.connectOutlet('wizardStep10', controller.get('content'));
},
back: Em.Router.transitionTo('step6'),
complete: function (router, context) {
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index 6ba9864514..84d0a69d29 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -167,7 +167,6 @@ module.exports = Em.Route.extend({
controller.saveClients(wizardStep4Controller);
App.db.setMasterComponentHosts(undefined);
- App.db.setHostToMasterComponent(undefined);
router.transitionTo('step5');
}
}),
@@ -274,6 +273,7 @@ module.exports = Em.Route.extend({
var wizardStep9Controller = router.get('wizardStep9Controller');
if (!wizardStep9Controller.get('isSubmitDisabled')) {
installerController.installServices();
+ installerController.setInfoForStep9();
wizardStep9Controller.navigateStep();
}
},
@@ -299,8 +299,7 @@ module.exports = Em.Route.extend({
complete: function (router, context) {
if (true) { // this function will be moved to installerController where it will validate
var controller = router.get('installerController');
- controller.setCurrentStep('1', false);
- router.setSection('main');
+ controller.finish();
router.transitionTo('main.index');
} else {
console.log('cluster installation failure');
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index b1894663a6..291586dede 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -21,6 +21,7 @@ module.exports = Em.Route.extend({
enter:function (router) {
console.log('in /main:enter');
if (router.getAuthenticated()) {
+ var clusterController = App.router.get('clusterController').loadClusterName(false);
router.get('mainController').initialize();
// TODO: redirect to last known state
} else {
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index c44584b510..126883e8b7 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -487,7 +487,7 @@ a:focus {
.name {
line-height: 21px;
margin-left: 0;
- width: 130px;
+ width: 145px;
a {
margin-left: 5px
}
@@ -510,13 +510,21 @@ a:focus {
}
}
- .chart {
+ .dashboard-mini-chart {
right: 0;
top: 27px;
position: absolute;
overflow: visible; // for quick links
text-align: center;
-
+ width: 200px;
+ height: 200px;
+ .chart-container{
+ .chart-x-axis{
+ left: 0%;
+ width: 100%;
+ text-align: left;
+ }
+ }
.chartLabel {
font-size: 11px;
color: #7b7b7b;
@@ -662,6 +670,14 @@ a:focus {
}
}
+.mini-chart{
+ position: absolute;
+ .chart-container{
+ width: 130px;
+ height: 130px;
+ }
+}
+
/*end chart/graph styles*/
/*****end styles for dashboard page*****/
@@ -694,6 +710,9 @@ a:focus {
}
li {
line-height: 24px;
+ a {
+ padding: 3px 10px;
+ }
}
}
.add-service-button {
@@ -913,6 +932,7 @@ a:focus {
margin-top: 27px;
+ /*
.component-operation-button {
background-color: #E5E5E5;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
@@ -923,6 +943,7 @@ a:focus {
background-repeat: repeat-x;
color: #000000;
}
+ */
.caret {
border-top-color: #000000;
border-bottom-color: #000000;
@@ -1006,7 +1027,7 @@ a:focus {
padding-bottom: 0;
border: 1px solid #DEDEDE;
border-radius: 4px;
- background: #F5F5F5;
+ background: #FFF;
}
.host-components .btn-group {
margin: 0 5px 10px 0;
diff --git a/ambari-web/app/styles/apps.less b/ambari-web/app/styles/apps.less
index 65d452028b..2ec88aaa84 100644
--- a/ambari-web/app/styles/apps.less
+++ b/ambari-web/app/styles/apps.less
@@ -1,4 +1,5 @@
#apps{
+
td .red {
color: red;
}
@@ -6,15 +7,27 @@
vertical-align:top;
}
.avg-table {
+ table-layout: fixed;
background-color: #F9F9F9;
td {
text-align:center;
border:none;
+ &.avg-star{
+ border-left:1px solid #DDD;
+ width: 30px;
+ }
}
}
- td.avg-star{
- border-left:1px solid #DDD;
+
+ #dataTable {
+ table-layout: fixed;
+ td {
+ &.appId {
+ word-wrap: break-word;
+ }
+ }
}
+
.dropdown-menu label.checkbox {
margin-left: 10px;
}
@@ -126,7 +139,9 @@
tr.containerRow > td{
background: #f9f9f9;
}
-
+ button {
+ margin: 0 2px;
+ }
svg{
vertical-align: top; //remove extra spaces after svg element
}
@@ -141,6 +156,7 @@
background: #fff;
padding: 10px;
box-sizing: border-box;
+ width: auto;
}
#jobs h2{
@@ -172,5 +188,29 @@
}
}
+ div.view-wrapper {
+ float: left;
+ }
+
+ a.ui-icon-circle-close {
+ float: right;
+ opacity: 0.2;
+ padding: 1px;
+ position: relative;
+ top: -32px;
+ &:hover {
+ opacity: 0.7;
+ }
+ }
+ .notActive {
+ a.ui-icon-circle-close {
+ visibility: hidden;
+ }
+ }
+}
+.btn-group button.single-btn-group{
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
}
diff --git a/ambari-web/app/templates/main/admin/user.hbs b/ambari-web/app/templates/main/admin/user.hbs
index e93c4616eb..bff8eb89ca 100644
--- a/ambari-web/app/templates/main/admin/user.hbs
+++ b/ambari-web/app/templates/main/admin/user.hbs
@@ -17,14 +17,15 @@
}}
{{#if view.ldapUser}}
- <p class="text-info">{{t admin.users.ldapAuthentionUsed}}.</p>
+<p class="text-info">{{t admin.users.ldapAuthentionUsed}}.</p>
{{else}}
<table class="table table-bordered table-striped span6">
<thead>
<tr>
<th style="width:50%">{{t admin.users.username}}</th>
- <th style="width:15%">{{t admin.users.privileges}}<i class="icon-question-sign"></i></th>
- <th style="width:15%">Action</th>
+ <th style="width:10%">{{t admin.users.privileges}}</th>
+ <th style="width:20%">{{t admin.users.type}}</th>
+ <th style="width:20%">{{t admin.users.action}}</th>
</tr>
</thead>
<tbody>
diff --git a/ambari-web/app/templates/main/admin/user/edit.hbs b/ambari-web/app/templates/main/admin/user/edit.hbs
index a784a33379..1c74264c90 100644
--- a/ambari-web/app/templates/main/admin/user/edit.hbs
+++ b/ambari-web/app/templates/main/admin/user/edit.hbs
@@ -18,6 +18,7 @@
<form class="form-horizontal">
{{#each field in view.userForm.fields}}
+ {{#unless field.isHidden}}
<div class="control-group">
<label class="control-label" for="input{{unbound field.name}}">{{unbound field.displayName}}</label>
<div class="controls">
@@ -25,6 +26,7 @@
<span class="help-inline">{{field.errorMessage}}</span>
</div>
</div>
+ {{/unless}}
{{/each}}
<div class="control-group">
<div class="controls">
diff --git a/ambari-web/app/templates/main/admin/user/row.hbs b/ambari-web/app/templates/main/admin/user/row.hbs
index c38bd876ba..3cf214892c 100644
--- a/ambari-web/app/templates/main/admin/user/row.hbs
+++ b/ambari-web/app/templates/main/admin/user/row.hbs
@@ -19,6 +19,7 @@
<tr>
<td>{{user.userName}}</td>
<td>{{view Ember.Checkbox disabledBinding="view.disableCheckBoxes" checkedBinding="user.admin"}}</td>
+ <td>{{user.type}}</td>
<td>
<a href="#" {{action gotoEditUser user on="click"}}>{{t admin.users.edit}}</a>&nbsp;
<a href="#" {{action deleteRecord user target="App.router.mainAdminUserController" }}>{{t admin.users.delete}}</a>
diff --git a/ambari-web/app/templates/main/apps.hbs b/ambari-web/app/templates/main/apps.hbs
index 184a8fb837..e2dc1d116e 100644
--- a/ambari-web/app/templates/main/apps.hbs
+++ b/ambari-web/app/templates/main/apps.hbs
@@ -78,16 +78,16 @@
<th>Run Date</th>
</tr>
<tr>
- <th>{{view view.starFilterView viewName="starFilterViewInstance"}}</th>
- <th>{{view view.appidFilterView}}</th>
- <th>{{view view.nameFilterView}}</th>
- <th>{{view view.typeSelectView}}</th>
- <th>{{view view.userFilterView}}<input id="user_filter" type="hidden"></th>
- <th>{{view view.jobsFilterView}}</th>
- <th>{{view view.inputFilterView}}</th>
- <th>{{view view.outputFilterView}}</th>
- <th>{{view view.durationFilterView}}</th>
- <th>{{view view.rundateSelectView}}</th>
+ <th class="notActive"><div class="view-wrapper">{{view view.starFilterView viewName="starFilterViewInstance"}}</div></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.appidFilterView viewName="appidFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_appidFilterViewInstance" class="ui-icon ui-icon-circle-close ui-appid"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.nameFilterView viewName="nameFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_nameFilterViewInstance" class="ui-icon ui-icon-circle-close ui-name"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.typeSelectView viewName="typeSelectViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_typeSelectViewInstance" class="ui-icon ui-icon-circle-close ui-type"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.userFilterView viewName="userFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_userFilterViewInstance" class="ui-icon ui-icon-circle-close ui-user"></a><input id="user_filter" type="hidden"></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.jobsFilterView viewName="jobsFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_jobsFilterViewInstance" class="ui-icon ui-icon-circle-close ui-jobs"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.inputFilterView viewName="inputFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_inputFilterViewInstance" class="ui-icon ui-icon-circle-close ui-input"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.outputFilterView viewName="outputFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_outputFilterViewInstance" class="ui-icon ui-icon-circle-close ui-output"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.durationFilterView viewName="durationFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_durationFilterViewInstance" class="ui-icon ui-icon-circle-close ui-duration"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.rundateSelectView viewName="rundateSelectViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_rundateSelectViewInstance" class="ui-icon ui-icon-circle-close ui-rundate"></a></th>
</tr>
</thead>
<tbody>
diff --git a/ambari-web/app/templates/main/apps/list_row.hbs b/ambari-web/app/templates/main/apps/list_row.hbs
index 9ff6ba54d1..e25e110196 100644
--- a/ambari-web/app/templates/main/apps/list_row.hbs
+++ b/ambari-web/app/templates/main/apps/list_row.hbs
@@ -25,4 +25,4 @@
<td>{{unbound run.inputFormatted}}</td>
<td>{{unbound run.outputFormatted}}</td>
<td>{{unbound run.duration}}</td>
-<td>{{unbound run.lastUpdateTimeFormatted}} {{#if run.isRunning}}<b class='red'>*</b>{{/if}}</td> \ No newline at end of file
+<td>{{unbound run.lastUpdateTimeFormatted}}&nbsp;{{#if run.isRunning}}<b class='red'>*</b>{{/if}}</td> \ No newline at end of file
diff --git a/ambari-web/app/templates/main/dashboard.hbs b/ambari-web/app/templates/main/dashboard.hbs
index d0031f0e5e..2d9dd2ffca 100644
--- a/ambari-web/app/templates/main/dashboard.hbs
+++ b/ambari-web/app/templates/main/dashboard.hbs
@@ -25,12 +25,9 @@
<h4>{{t dashboard.services}}</h4>
</div>
<dl class="dl-horizontal services">
- {{view App.MainDashboardServiceHdfsView controllerBinding="controller"}}
- {{view App.MainDashboardServiceMapreduceView controllerBinding="controller"}}
- {{view App.MainDashboardServiceHbaseView controllerBinding="controller"}}
- {{view App.MainDashboardServiceHiveView controllerBinding="controller"}}
- {{view App.MainDashboardServiceZookeperView controllerBinding="controller"}}
- {{view App.MainDashboardServiceOozieView controllerBinding="controller"}}
+ {{#each item in view.content}}
+ {{view item.viewName serviceBinding="item.model"}}
+ {{/each}}
</dl>
</div>
</div>
diff --git a/ambari-web/app/templates/main/dashboard/service/hbase.hbs b/ambari-web/app/templates/main/dashboard/service/hbase.hbs
index 93cf59f533..5ed390806d 100644
--- a/ambari-web/app/templates/main/dashboard/service/hbase.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/hbase.hbs
@@ -70,7 +70,7 @@
</tr>
</tbody>
</table>
-<div class="chart">
+<div class="dashboard-mini-chart">
{{view view.Chart}}
<div class="chartLabel">{{t dashboard.services.hbase.chart.label}}</div>
{{#if view.service.quickLinks.length}}
diff --git a/ambari-web/app/templates/main/dashboard/service/hdfs.hbs b/ambari-web/app/templates/main/dashboard/service/hdfs.hbs
index d0c595ede3..18f78dfc40 100644
--- a/ambari-web/app/templates/main/dashboard/service/hdfs.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/hdfs.hbs
@@ -120,7 +120,7 @@
</tr>
</tbody>
</table>
-<div class="chart">
+<div class="dashboard-mini-chart">
{{view view.Chart}}
<div class="chartLabel">{{t dashboard.services.hdfs.chart.label}}</div>
{{#if view.service.quickLinks.length}}
diff --git a/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs b/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs
index 414dff0062..d461f78617 100644
--- a/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs
@@ -67,7 +67,8 @@
<td>{{t dashboard.services.mapreduce.taskTrackerCounts}}</td>
<td>
{{view.service.grayListTrackers.length}} {{t dashboard.services.mapreduce.nodes.blacklist}} /
- {{view.service.blackListTrackers.length}} {{t dashboard.services.mapreduce.nodes.graylist}}
+ {{view.service.blackListTrackers.length}} {{t dashboard.services.mapreduce.nodes.graylist}} /
+ {{view.service.trackersDecommisioned}} {{t dashboard.services.hdfs.nodes.decom}}
</td>
</tr>
<!-- JobTracker Heap -->
@@ -107,7 +108,7 @@
</tr>
</tbody>
</table>
-<div class="chart">
+<div class="dashboard-mini-chart">
{{view App.ChartServiceMetricsMapReduce_JobsRunningWaiting}}
{{#if view.service.quickLinks.length}}
diff --git a/ambari-web/app/templates/main/host.hbs b/ambari-web/app/templates/main/host.hbs
index 65fc12c5d1..36e2eb0df1 100644
--- a/ambari-web/app/templates/main/host.hbs
+++ b/ambari-web/app/templates/main/host.hbs
@@ -62,7 +62,7 @@
<th>Load Avg</th>
<th>
<div {{bindAttr class="view.btnGroupClass"}} >
- <button class="btn btn-info" {{action "clickFilterButton" target="view"}}>
+ <button class="btn btn-info single-btn-group" {{action "clickFilterButton" target="view"}}>
Components
<span class="caret"></span>
</button>
diff --git a/ambari-web/app/templates/main/host/summary.hbs b/ambari-web/app/templates/main/host/summary.hbs
index 9fba6206fd..7d8a011153 100644
--- a/ambari-web/app/templates/main/host/summary.hbs
+++ b/ambari-web/app/templates/main/host/summary.hbs
@@ -17,7 +17,7 @@
}}
<div class="row">
- <div class="span5 host-configuration">
+ <div class="span6 host-configuration">
<div class="box">
<div class="box-header">
<h4>Summary</h4>
@@ -26,9 +26,9 @@
<dl class="dl-horizontal">
<dt>IP:</dt><dd>{{view.content.ip}}</dd>
<dt>CPU:</dt><dd>{{view.content.cpu}}</dd>
- <dt>OS:</dt><dd>type</dd>
- <dt>Disk Usage:</dt><dd>{{view.content.diskUsage}}</dd>
- <dt>Memory:</dt><dd>{{view.content.memory}}</dd>
+ <dt>OS:</dt><dd>{{view.content.osType}}&nbsp;({{view.content.osArch}})</dd>
+ <dt>Disk Usage:</dt><dd>{{view.content.diskUsage}}</dd>
+ <dt>Memory:</dt><dd>{{view.content.memoryFormatted}}</dd>
<dt>Load Avg:</dt><dd>{{view.content.loadAvg}}</dd>
<dt>Agent:</dt><dd>running</dd>
</dl>
@@ -39,10 +39,17 @@
<div class="span3 host-components pull-right">
{{#each component in view.content.components}}
{{#view view.ComponentButtonView contentBinding="component"}}
- <div {{bindAttr class=":btn-group view.positionButton:pull-right:pull-left"}}>
- <button {{bindAttr class=":component-operation-button :btn :btn-success :dropdown-toggle view.disabledClass"}} data-toggle="dropdown">
+ {{#if view.isClient}}
+ <div class="btn-group pull-left">
+ <button class="btn">
+ {{unbound view.content.displayName}}
+ </button>
+ </div>
+ {{else}}
+ <div {{bindAttr class=":btn-group :pull-left"}}>
+ <button {{bindAttr class=":component-operation-button :btn :dropdown-toggle view.disabledClass"}} data-toggle="dropdown">
<span {{bindAttr class=":components-health view.indicatorClass"}}></span>
- {{unbound view.content.componentName}}
+ {{unbound view.content.displayName}}
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
@@ -70,6 +77,7 @@
</li>
</ul>
</div>
+ {{/if}}
{{/view}}
{{/each}}
</div>
diff --git a/ambari-web/app/templates/main/service/menu_item.hbs b/ambari-web/app/templates/main/service/menu_item.hbs
index f2a7211637..9c67c975ce 100644
--- a/ambari-web/app/templates/main/service/menu_item.hbs
+++ b/ambari-web/app/templates/main/service/menu_item.hbs
@@ -18,9 +18,9 @@
<a href="#/main/services/{{unbound view.content.id}}/summary">
{{view App.MainDashboardServiceHealthView class="service-health" serviceBinding="view.content"}}&nbsp;<span>{{unbound view.content.displayName}}</span>
- {{#if view.serviceOperationsCount}}
- <span class="label operations-count" {{action "showPopup" target="App.router.backgroundOperationsController"}}>
- {{view.serviceOperationsCount}}
+ {{#if view.alertsCount}}
+ <span class="label operations-count">
+ {{view.alertsCount}}
</span>
{{/if}}
</a>
diff --git a/ambari-web/app/templates/wizard/step5.hbs b/ambari-web/app/templates/wizard/step5.hbs
index 2cfb70e81c..2610b2239f 100644
--- a/ambari-web/app/templates/wizard/step5.hbs
+++ b/ambari-web/app/templates/wizard/step5.hbs
@@ -36,6 +36,7 @@
selectedHostBinding="selectedHost"
serviceNameBinding="display_name"
zIdBinding="zId"
+ disabledBinding="isInstalled"
}}
{{#if showAddControl}}
{{view App.AddControlView
diff --git a/ambari-web/app/templates/wizard/step6.hbs b/ambari-web/app/templates/wizard/step6.hbs
index 7013652bc4..002a475c20 100644
--- a/ambari-web/app/templates/wizard/step6.hbs
+++ b/ambari-web/app/templates/wizard/step6.hbs
@@ -66,7 +66,7 @@
{{#each hosts}}
<tr>
{{#view App.WizardStep6HostView hostBinding = "this" }}
- {{hostname}}
+ {{hostName}}
{{#if isMaster}}
<i class=icon-asterisks>&#10037</i>
{{/if}}
diff --git a/ambari-web/app/utils/data_table.js b/ambari-web/app/utils/data_table.js
index c02e656fb2..7f2991a364 100644
--- a/ambari-web/app/utils/data_table.js
+++ b/ambari-web/app/utils/data_table.js
@@ -322,9 +322,8 @@ jQuery.extend($.fn.dataTableExt.afnFiltering.push(
break;
case '=':
if (compareValue == rowValue) match = true;
- break;
default:
- match = false;
+ if (rangeExp == rowValue) match = true;
}
}
diff --git a/ambari-web/app/utils/date.js b/ambari-web/app/utils/date.js
index e283cb7466..86094d4a7c 100644
--- a/ambari-web/app/utils/date.js
+++ b/ambari-web/app/utils/date.js
@@ -77,7 +77,7 @@ module.exports = {
dateUnformatInterval: function(formattedDate) {
var d = formattedDate.split(':');
for (var k in d) {
- d[k] = parseInt(d[k]);
+ d[k] = parseInt(d[k], 10);
}
return d[0]*3600+d[1]*60+d[2];
}
diff --git a/ambari-web/app/utils/db.js b/ambari-web/app/utils/db.js
index 46bff9514d..cd5a92c70a 100644
--- a/ambari-web/app/utils/db.js
+++ b/ambari-web/app/utils/db.js
@@ -50,7 +50,10 @@ App.db.cleanUp = function () {
'app': {
'loginName': '',
'authenticated': false
- }
+ },
+ 'Installer' : {},
+ 'AddHost' : {},
+ 'AddService' : {}
};
console.log("In cleanup./..");
localStorage.setObject('ambari', App.db.data);
@@ -80,7 +83,10 @@ App.db.setAmbariStacks = function (stacks) {
localStorage.setObject('ambari', App.db.data);
};
-// that works incorrectly
+/**
+ * Set user model to db
+ * @param user
+ */
App.db.setUser = function (user) {
console.log('TRACE: Entering db:setUser function');
App.db.data = localStorage.getObject('ambari');
@@ -100,106 +106,45 @@ App.db.setAuthenticated = function (authenticated) {
console.log('Now present value of authentication is: ' + App.db.data.app.authenticated);
};
-App.db.setSection = function (section) {
- console.log('TRACE: Entering db:setSection function');
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- if (App.db.data[user].ClusterName == undefined) {
- App.db.data[user].ClusterName = {};
- }
- App.db.data[user].section = section;
- localStorage.setObject('ambari', App.db.data);
-};
-
-App.db.setInstallerCurrentStep = function (currentStep, completed) {
- console.log('TRACE: Entering db:setInstallerCurrentStep function');
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- console.log('In data[user] condition');
- App.db.data[user] = {'name': user};
- console.log('value of data[user].name: ' + App.db.data[user].name);
- }
- if (App.db.data[user].Installer == undefined) {
- App.db.data[user].Installer = {};
- console.log('');
- }
- App.db.data[user].Installer.currentStep = currentStep;
- App.db.data[user].Installer.completed = completed;
- localStorage.setObject('ambari', App.db.data);
-};
-
App.db.setClusterName = function (name) {
console.log('TRACE: Entering db:setClusterName function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- // all information from Installer.ClusterName will be transferred to clusters[ClusterName] when app migrates from installer to main
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- if (App.db.data[user].clusters == undefined) {
- App.db.data[user].clusters = {};
- }
-
- if (App.db.data[user].Installer == undefined) {
- App.db.data[user].Installer = {};
- }
- App.db.data[user].Installer.ClusterName = name;
+ App.db.data.Installer.ClusterName = name;
localStorage.setObject('ambari', App.db.data);
};
App.db.setAllHostNames = function (hostNames) {
console.log('TRACE: Entering db:setAllHostNames function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- App.db.data[user].Installer.hostNames = hostNames;
+ App.db.data.Installer.hostNames = hostNames;
localStorage.setObject('ambari', App.db.data);
};
App.db.setHosts = function (hostInfo) {
console.log('TRACE: Entering db:setHosts function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- App.db.data[user].Installer.hostInfo = hostInfo;
+ App.db.data.Installer.hostInfo = hostInfo;
localStorage.setObject('ambari', App.db.data);
};
App.db.setInstallType = function (installType) {
console.log('TRACE: Entering db:setInstallType function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- App.db.data[user].Installer.installType = installType;
+ App.db.data.Installer.installType = installType;
localStorage.setObject('ambari', App.db.data);
};
App.db.setSoftRepo = function (softRepo) {
console.log('TRACE: Entering db:setSoftRepo function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined) {
- App.db.data[user] = {'name': user};
- }
- App.db.data[user].Installer.softRepo = softRepo;
+ App.db.data.Installer.softRepo = softRepo;
localStorage.setObject('ambari', App.db.data);
};
App.db.setBootStatus = function (status) {
console.log('TRACE: Entering db:setBootStatus function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.bootStatus = status;
+ App.db.data.Installer.bootStatus = status;
localStorage.setObject('ambari', App.db.data);
};
@@ -216,87 +161,89 @@ App.db.removeHosts = function (hostInfo) {
App.db.setService = function (serviceInfo) {
console.log('TRACE: Entering db:setService function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.serviceInfo = serviceInfo;
+ App.db.data.Installer.serviceInfo = serviceInfo;
localStorage.setObject('ambari', App.db.data);
};
App.db.setSelectedServiceNames = function (serviceNames) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.selectedServiceNames = serviceNames;
+ App.db.data.Installer.selectedServiceNames = serviceNames;
localStorage.setObject('ambari', App.db.data);
};
App.db.setClientsForSelectedServices = function (clientInfo) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.clientInfo = clientInfo;
+ App.db.data.Installer.clientInfo = clientInfo;
localStorage.setObject('ambari', App.db.data);
};
App.db.setMasterComponentHosts = function (masterComponentHosts) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.masterComponentHosts = masterComponentHosts;
- localStorage.setObject('ambari', App.db.data);
-};
-
-App.db.setHostToMasterComponent = function (hostToMasterComponent) {
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.hostToMasterComponent = hostToMasterComponent;
+ App.db.data.Installer.masterComponentHosts = masterComponentHosts;
localStorage.setObject('ambari', App.db.data);
};
App.db.setHostSlaveComponents = function (hostSlaveComponents) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.hostSlaveComponents = hostSlaveComponents;
+ App.db.data.Installer.hostSlaveComponents = hostSlaveComponents;
localStorage.setObject('ambari', App.db.data);
};
App.db.setSlaveComponentHosts = function (slaveComponentHosts) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.slaveComponentHosts = slaveComponentHosts;
+ App.db.data.Installer.slaveComponentHosts = slaveComponentHosts;
localStorage.setObject('ambari', App.db.data);
};
App.db.setServiceConfigs = function (serviceConfigs) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.serviceConfigs = serviceConfigs;
+ App.db.data.Installer.serviceConfigs = serviceConfigs;
localStorage.setObject('ambari', App.db.data);
};
App.db.setAdvancedServiceConfig = function(serviceConfigs) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.advanceServiceConfigs = serviceConfigs;
+ App.db.data.Installer.advanceServiceConfigs = serviceConfigs;
localStorage.setObject('ambari', App.db.data);
};
App.db.setServiceConfigProperties = function (configProperties) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].Installer.configProperties = configProperties;
+ App.db.data.Installer.configProperties = configProperties;
localStorage.setObject('ambari', App.db.data);
};
App.db.setClusterStatus = function (status) {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- App.db.data[user].clusterStatus = status;
+ App.db.data.Installer.clusterStatus = status;
console.log('db.setClusterStatus called: ' + JSON.stringify(status));
localStorage.setObject('ambari', App.db.data);
};
+/**
+ * Set current step value for specified Wizard Type
+ * @param wizardType
+ * @param currentStep
+ * @param completed
+ */
+App.db.setWizardCurrentStep = function (wizardType, currentStep, completed) {
+ console.log('TRACE: Entering db:setWizardCurrentStep function');
+
+ App.db.data[wizardType.capitalize()].currentStep = currentStep;
+ App.db.data[wizardType.capitalize()].completed = completed;
+
+ localStorage.setObject('ambari', App.db.data);
+};
+
+
/*
* getter methods
*/
-// that works incorrectly
+/**
+ * Get user model from db
+ * @return {*}
+ */
App.db.getUser = function () {
console.log('TRACE: Entering db:getUser function');
App.db.data = localStorage.getObject('ambari');
@@ -315,25 +262,10 @@ App.db.getAuthenticated = function () {
return App.db.data.app.authenticated;
};
-App.db.getSection = function () {
- console.log('Trace: Entering db:getSection function');
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName
- if (App.db.data[user] == undefined || App.db.data[user] == '') {
- return 0;
- }
- return App.db.data[user].section;
-}
-
App.db.getClusterName = function () {
console.log('Trace: Entering db:getClusterName function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (user && App.db.data[user] && App.db.data[user].Installer) {
- return App.db.data[user].Installer.ClusterName;
- } else {
- return null;
- }
+ return App.db.data.Installer.ClusterName;
};
App.db.getAmbariStacks = function () {
@@ -349,162 +281,97 @@ App.db.getAmbariStacks = function () {
*/
App.db.getWizardCurrentStep = function (wizardType) {
console.log('Trace: Entering db:getWizardCurrentStep function for ', wizardType);
- var user = this.getUser();
- if (App.db.data[user] && App.db.data[user][wizardType.capitalize()]) {
- return App.db.data[user][wizardType.capitalize()].currentStep;
+ if (App.db.data[wizardType.capitalize()]) {
+ return App.db.data[wizardType.capitalize()].currentStep;
}
return 0;
};
-/**
- * Set current step value for specified Wizard Type
- * @param wizardType
- * @param currentStep
- * @param completed
- */
-App.db.setWizardCurrentStep = function (wizardType, currentStep, completed) {
- console.log('TRACE: Entering db:setWizardCurrentStep function');
-
- var user = this.getUser();
- if (!App.db.data[user]) {
- App.db.data[user] = {name: user};
- console.log('value of data[user].name: ' + App.db.data[user].name);
- }
- App.db.data[user][wizardType.capitalize()] = {
- currentStep: currentStep,
- completed: completed
- };
- localStorage.setObject('ambari', App.db.data);
-};
-
-App.db.getInstallerCurrentStep = function () {
- console.log('Trace: Entering db:getInstallerCurrentStep function');
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined || App.db.data[user] == '') {
- return 0;
- }
- return App.db.data[user].Installer.currentStep;
-};
-
App.db.getAllHostNames = function () {
console.log('TRACE: Entering db:getHostNames function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.hostNames;
+ return App.db.data.Installer.hostNames;
};
App.db.getInstallType = function () {
console.log('TRACE: Entering db:getHostNames function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.installType;
+ return App.db.data.Installer.installType;
};
App.db.getSoftRepo = function () {
console.log('TRACE: Entering db:getSoftRepo function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.softRepo;
+ return App.db.data.Installer.softRepo;
};
App.db.isCompleted = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.completed;
+ return App.db.data.Installer.completed;
};
App.db.getHosts = function () {
console.log('TRACE: Entering db:getHosts function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] == undefined || App.db.data[user] == '') {
- console.log('ERROR: loginName required for storing host info');
- return 0;
- }
- return App.db.data[user].Installer.hostInfo;
+ return App.db.data.Installer.hostInfo;
};
App.db.getBootStatus = function () {
console.log('TRACE: Entering db:getBootStatus function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.bootStatus;
+ return App.db.data.Installer.bootStatus;
};
App.db.getService = function () {
console.log('TRACE: Entering db:getService function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.serviceInfo;
+ return App.db.data.Installer.serviceInfo;
};
App.db.getSelectedServiceNames = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.selectedServiceNames;
+ return App.db.data.Installer.selectedServiceNames;
};
App.db.getClientsForSelectedServices = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.clientInfo;
+ return App.db.data.Installer.clientInfo;
};
App.db.getMasterComponentHosts = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.masterComponentHosts;
+ return App.db.data.Installer.masterComponentHosts;
};
-App.db.getHostToMasterComponent = function () {
- App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.hostToMasterComponent;
-}
-
App.db.getHostSlaveComponents = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.hostSlaveComponents;
+ return App.db.data.Installer.hostSlaveComponents;
};
App.db.getSlaveComponentHosts = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] && App.db.data[user].Installer) {
- return App.db.data[user].Installer.slaveComponentHosts;
- }
- return null;
+ return App.db.data.Installer.slaveComponentHosts;
};
App.db.getServiceConfigs = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.serviceConfigs;
+ return App.db.data.Installer.serviceConfigs;
};
App.db.getAdvancedServiceConfig = function() {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.advanceServiceConfigs;
+ return App.db.data.Installer.advanceServiceConfigs;
};
App.db.getServiceConfigProperties = function () {
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- return App.db.data[user].Installer.configProperties;
+ return App.db.data.Installer.configProperties;
};
App.db.getClusterStatus = function () {
console.log('TRACE: Entering db:getClusterStatus function');
App.db.data = localStorage.getObject('ambari');
- var user = App.db.data.app.loginName;
- if (App.db.data[user] && App.db.data[user].clusterStatus) {
- return App.db.data[user].clusterStatus;
- } else {
- return null;
- }
+ return App.db.data.Installer.clusterStatus;
};
module.exports = App.db;
diff --git a/ambari-web/app/views/main/admin/menu.js b/ambari-web/app/views/main/admin/menu.js
index 6e177a61fb..1994ba9408 100644
--- a/ambari-web/app/views/main/admin/menu.js
+++ b/ambari-web/app/views/main/admin/menu.js
@@ -23,11 +23,11 @@ App.MainAdminMenuView = Em.CollectionView.extend({
{
route:'user',
label:'Users'
- },
+ }/*,
{
route:'authentication',
label:'Authentication'
- }/*,
+ },
{
route:'security',
label:'Security'
diff --git a/ambari-web/app/views/main/admin/user/edit.js b/ambari-web/app/views/main/admin/user/edit.js
index c2cf2f9ca0..07388cebe7 100644
--- a/ambari-web/app/views/main/admin/user/edit.js
+++ b/ambari-web/app/views/main/admin/user/edit.js
@@ -25,12 +25,16 @@ App.MainAdminUserEditView = Em.View.extend({
var form = this.get("userForm");
if(form.isValid()) {
var controller = this.get('controller');
- var roles="user";
- if(form.getValues().admin=="") roles="admin";
+ if(form.getValues().admin === "" || form.getValues().admin == true) {
+ form.field.roles.set('value',"admin");
+ form.field.admin.set('value',"true");
+ } else{
+ form.field.roles.set('value',"user");
+ }
controller.sendCommandToServer('/users/' + form.getValues().userName, {
Users: {
password: form.getValues().password,
- roles: roles
+ roles: form.getValues().roles
}
}, function (requestId) {
diff --git a/ambari-web/app/views/main/apps/item/dag_view.js b/ambari-web/app/views/main/apps/item/dag_view.js
index dac265f026..680034bb04 100644
--- a/ambari-web/app/views/main/apps/item/dag_view.js
+++ b/ambari-web/app/views/main/apps/item/dag_view.js
@@ -92,6 +92,14 @@ App.MainAppsItemDagView = Em.View.extend({
null
]
});
+
+ // Hard reset filter settings
+ innerTable.fnSettings().aiDisplay = innerTable.fnSettings().aiDisplayMaster.slice();
+ // Redraw table
+ innerTable.fnDraw(false);
+ innerTable.fnSettings().oFeatures.bFilter = false;
+
+ console.log(innerTable.fnSettings());
var dagSchema = this.get('controller.content.workflowContext');
var jobs = this.get('jobs');
var graph = new DagViewer(false, 'dag_viewer')
diff --git a/ambari-web/app/views/main/apps_view.js b/ambari-web/app/views/main/apps_view.js
index 5e0897eff0..1e650b1423 100644
--- a/ambari-web/app/views/main/apps_view.js
+++ b/ambari-web/app/views/main/apps_view.js
@@ -232,7 +232,6 @@ App.MainAppsView = Em.View.extend({
this.get('oTable').fnPageChange(Math.floor(rowIndex / perPage));
}
var d = this.get('oTable').fnGetData();
- console.log(this.get('oTable').fnSettings()['aiDisplay']);
}.observes('controller.lastStarClicked'),
/**
* Flush all starred runs
@@ -254,13 +253,24 @@ App.MainAppsView = Em.View.extend({
$('#dataTable .icon-star').removeClass('stared');
$('a.icon-star.a').removeClass('active');
this.get('starFilterViewInstance').set('value', '');
- $('#dataTable tbody tr').each(function(index) {
+ /*$('#dataTable tbody tr').each(function(index) {
var td = $(this).find('td:eq(0)');
self.get('oTable').fnUpdate( td.html(), index, 0);
- });
+ });*/
+ this.updateStars();
}
}.observes('controller.staredRunsLength'),
/**
+ * Update stars data in dataTable. data taken from page
+ * Experimental. Need to be tested.
+ */
+ updateStars: function() {
+ var self = this;
+ $('#dataTable tbody tr').each(function(index) {
+ self.get('oTable').fnUpdate( $('#dataTable tbody tr:eq(' + index + ') td:eq(0)').html(), self.get('oTable').fnSettings()['aiDisplay'][index], 0);
+ });
+ },
+ /**
* Reset filters and "turn off" stars
*/
showAll: function() {
@@ -271,6 +281,7 @@ App.MainAppsView = Em.View.extend({
* Display only stared rows
*/
showStared: function() {
+ this.updateStars();
this.get('starFilterViewInstance').set('value', 'stared');
this.set('whatAvgShow', false);
$('a.icon-star.a').addClass('active');
@@ -291,7 +302,6 @@ App.MainAppsView = Em.View.extend({
$(element).addClass('selected');
}
});
- console.log(viewType);
switch(viewType) {
case 'all':
table.fnSettings().oFeatures.bFilter = false;
@@ -397,6 +407,24 @@ App.MainAppsView = Em.View.extend({
this.setFilteredRuns(this.get('oTable')._('tr', {"filter":"applied"}));
},
/**
+ * Clear selected filter
+ * @param event
+ */
+ clearFilterButtonClick: function(event) {
+ var viewName = event.target.id.replace('view_', '');
+ var elementId = this.get(viewName).get('elementId');
+ if(this.get(viewName).get('tagName') === 'input') {
+ this.get(viewName).set('value', '');
+ }
+ if(this.get(viewName).get('tagName') === 'select') {
+ this.get(viewName).set('value', 'Any');
+ this.get(viewName).change();
+ }
+ if(this.get(viewName).get('multiple')) {
+ this.get(viewName).get('clearFilter')(this.get(viewName));
+ }
+ },
+ /**
* apply each filter to dataTable
*
* @param {parentView}
@@ -427,9 +455,12 @@ App.MainAppsView = Em.View.extend({
content:['Any', 'Pig', 'Hive', 'mapReduce'],
change:function(event){
if(this.get('selection') === 'Any') {
+ this.$().closest('th').addClass('notActive');
this.get('parentView').get('oTable').fnFilter('', 3);
- } else {
- this.get('parentView').get('oTable').fnFilter(this.get('selection'), 3);
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ this.get('parentView').get('oTable').fnFilter(this.get('selection'), 3);
}
this.get('parentView').set('filtered',this.get('parentView').get('oTable').fnSettings().fnRecordsDisplay());
}
@@ -446,6 +477,12 @@ App.MainAppsView = Em.View.extend({
classNames:['input-medium'],
elementId: 'rundate_filter',
change:function(event) {
+ if (this.get('selection') == 'Any') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 9);
}
}),
@@ -465,11 +502,17 @@ App.MainAppsView = Em.View.extend({
* Filter-field for AppId
*/
appidFilterView: Em.TextField.extend({
- classNames:['input-small'],
+ classNames:['input-medium'],
type:'text',
placeholder: 'Any ID',
elementId:'appid_filter',
filtering:function() {
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 1, this.get('value'));
}.observes('value')
}),
@@ -481,6 +524,12 @@ App.MainAppsView = Em.View.extend({
type:'text',
placeholder: 'Any Name',
filtering:function(){
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 2, this.get('value'));
}.observes('value')
}),
@@ -493,6 +542,12 @@ App.MainAppsView = Em.View.extend({
placeholder: 'Any ',
elementId:'jobs_filter',
filtering:function(){
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 5);
}.observes('value')
}),
@@ -505,6 +560,12 @@ App.MainAppsView = Em.View.extend({
placeholder: 'Any ',
elementId: 'input_filter',
filtering:function(){
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 6);
}.observes('value')
}),
@@ -517,7 +578,13 @@ App.MainAppsView = Em.View.extend({
placeholder: 'Any ',
elementId: 'output_filter',
filtering:function(){
- this.get('parentView').get('applyFilter')(this.get('parentView'), 7);
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
+ this.get('parentView').get('applyFilter')(this.get('parentView'), 7);
}.observes('value')
}),
/**
@@ -529,6 +596,12 @@ App.MainAppsView = Em.View.extend({
placeholder: 'Any ',
elementId: 'duration_filter',
filtering:function(){
+ if (this.get('value') == '') {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
this.get('parentView').get('applyFilter')(this.get('parentView'), 8);
}.observes('value')
}),
@@ -540,7 +613,6 @@ App.MainAppsView = Em.View.extend({
classNameBindings: ['open'],
multiple:true,
open: false,
- isApplyDisabled:true,
users:function(){
var users = [];
for(var i = 0; i < this.get('parentView').get('users').length; i++)
@@ -551,7 +623,7 @@ App.MainAppsView = Em.View.extend({
return users;
}.property('parentView.users'),
template: Ember.Handlebars.compile(
- '<button class="btn btn-info" '+
+ '<button class="btn btn-info single-btn-group"'+
'{{action "clickFilterButton" target="view"}}>'+
'User&nbsp;<span class="caret"></span></button>'+
'<ul class="dropdown-menu filter-components">'+
@@ -559,10 +631,13 @@ App.MainAppsView = Em.View.extend({
'{{view Ember.Checkbox checkedBinding="view.allComponentsChecked"}} All</label></li>'+
'{{#each user in view.users}}<li><label class="checkbox">' +
'{{view Ember.Checkbox checkedBinding="user.checked"}}{{user.name}}'+
- '</label></li>{{/each}}</ul>'+
- '<button {{bindAttr disabled="view.isApplyDisabled"}}'+
- 'class="btn" {{action "applyFilter" target="view"}}>'+
- 'Apply</button>'
+ '</label></li>{{/each}}'+
+ '<li>' +
+ '<button class="btn" {{action "closeFilter" target="view"}}>' +
+ 'Cancel</button>' +
+ '<button class="btn btn-primary" {{action "applyFilter" target="view"}}>'+
+ 'Apply</button>'+
+ '</li></ul>'
),
allComponentsChecked:false,
toggleAllComponents: function() {
@@ -573,23 +648,31 @@ App.MainAppsView = Em.View.extend({
}.observes('allComponentsChecked'),
clickFilterButton:function(event) {
this.set('open', !this.get('open'));
- this.set('isApplyDisabled', !this.get('isApplyDisabled'));
},
clearFilter:function(self) {
self.set('allComponentsChecked', true);
self.set('allComponentsChecked', false);
jQuery('#user_filter').val([]);
self.get('parentView').get('oTable').fnFilter('', 3);
+ jQuery('#user_filter').closest('th').addClass('notActive');
+ },
+ closeFilter: function(){
+ this.set('open', false);
},
applyFilter:function() {
var chosenUsers = new Array();
this.set('open', !this.get('open'));
- this.set('isApplyDisabled', !this.get('isApplyDisabled'));
this.get('users').forEach(function(item){
if(item.get('checked')) chosenUsers.push(item.get('name'));
});
jQuery('#user_filter').val(chosenUsers);
this.get('parentView').get('applyFilter')(this.get('parentView'), 3);
+ if (chosenUsers.length == 0) {
+ this.$().closest('th').addClass('notActive');
+ }
+ else {
+ this.$().closest('th').removeClass('notActive');
+ }
}
}),
/**
diff --git a/ambari-web/app/views/main/dashboard.js b/ambari-web/app/views/main/dashboard.js
index 4d8765d5c9..3aa3f42289 100644
--- a/ambari-web/app/views/main/dashboard.js
+++ b/ambari-web/app/views/main/dashboard.js
@@ -19,5 +19,42 @@
var App = require('app');
App.MainDashboardView = Em.View.extend({
- templateName: require('templates/main/dashboard')
+ templateName: require('templates/main/dashboard'),
+ content : [],
+ services:function(){
+ var services = App.Service.find();
+ services.forEach(function(item){
+ var vName;
+ var item2;
+ switch(item.get('serviceName')) {
+ case "HDFS":
+ vName = App.MainDashboardServiceHdfsView;
+ item2 = App.HDFSService.find(item.get('id'));
+ break;
+ case "MAPREDUCE":
+ vName = App.MainDashboardServiceMapreduceView;
+ item2 = App.MapReduceService.find(item.get('id'));
+ break;
+ case "HBASE":
+ vName = App.MainDashboardServiceHbaseView;
+ break;
+ case "HIVE":
+ vName = App.MainDashboardServiceHiveView ;
+ break;
+ case "ZOOKEEPER":
+ vName = App.MainDashboardServiceZookeperView;
+ break;
+ case "OOZIE":
+ vName = App.MainDashboardServiceOozieView;
+ break;
+ default:
+ vName = Em.View;
+ }
+ this.get('content').pushObject({
+ viewName : vName,
+ model: item2 || item
+ })
+ }, this);
+
+ }.observes('App.router.clusterController.dataLoadList.services')
}); \ No newline at end of file
diff --git a/ambari-web/app/views/main/dashboard/service.js b/ambari-web/app/views/main/dashboard/service.js
index 400abed0a0..3c625f99a4 100644
--- a/ambari-web/app/views/main/dashboard/service.js
+++ b/ambari-web/app/views/main/dashboard/service.js
@@ -79,23 +79,9 @@ App.MainDashboardServiceView = Em.View.extend({
return this.get('controller.data.' + this.get('serviceName'));
}.property('controller.data'),
- service: function () {
- var services = this.get('controller.services');
- if (services) {
- return services.findProperty('serviceName', this.get('serviceName'));
- }
- }.property('controller.services'),
-
criticalAlertsCount: function () {
- var alerts = this.get('service.alerts');
- var count = 0;
-
- if (alerts) {
- alerts.forEach(function (alert) {
- count += (alert.get('status') == App.AlertStatus.negative);
- });
- }
- return count;
+ var alerts = this.get('controller.alerts');
+ return alerts.filterProperty('serviceType', this.get('service.id')).filterProperty('status', '1').length;
}.property('service.alerts')
}); \ No newline at end of file
diff --git a/ambari-web/app/views/main/dashboard/service/hdfs.js b/ambari-web/app/views/main/dashboard/service/hdfs.js
index 572b0798f6..db8b15faa7 100644
--- a/ambari-web/app/views/main/dashboard/service/hdfs.js
+++ b/ambari-web/app/views/main/dashboard/service/hdfs.js
@@ -34,22 +34,18 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
return this.t('dashboard.services.uptime').format(formatted.d, formatted.h, formatted.m);
}.property("service.nameNodeStartTime"),
- service: function(){
- return App.HDFSService.find().objectAt(0);
- }.property('App.router.clusterController.dataLoadList.services'),
-
nodeWebUrl: function(){
return "http://"+this.get('service').get('nameNode').get('hostName')+":50070";
}.property('service.nameNode'),
nodeHeap:function () {
-
- var percent = this.get('data.namenode_heap_total') > 0 ? 100 * this.get('data.namenode_heap_used') / this.get('data.namenode_heap_total') : 0;
-
+ var memUsed = this.get('service').get('jvmMemoryHeapUsed')*1000000;
+ var memCommitted = this.get('service').get('jvmMemoryHeapCommitted')*1000000;
+ var percent = memCommitted>0 ? ((100*memUsed)/memCommitted) : 0;
return this.t('dashboard.services.hdfs.nodes.heapUsed').format(
- (this.get('service').get('jvmMemoryHeapUsed')*1000000).bytesToSize(1, 'parseFloat'),
- (this.get('service').get('jvmMemoryHeapCommitted')*1000000).bytesToSize(1, 'parseFloat')
- , percent.toFixed(1));
+ memUsed.bytesToSize(1, 'parseFloat'),
+ memCommitted.bytesToSize(1, 'parseFloat'),
+ percent.toFixed(1));
}.property('service'),
@@ -74,5 +70,5 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
dataNodeComponent: function(){
return App.Component.find().findProperty('componentName', 'DATANODE');
- }.property('components')
+ }.property('+')
}); \ No newline at end of file
diff --git a/ambari-web/app/views/main/dashboard/service/mapreduce.js b/ambari-web/app/views/main/dashboard/service/mapreduce.js
index b1bd501200..0eed8616f4 100644
--- a/ambari-web/app/views/main/dashboard/service/mapreduce.js
+++ b/ambari-web/app/views/main/dashboard/service/mapreduce.js
@@ -20,11 +20,6 @@ var App = require('app');
App.MainDashboardServiceMapreduceView = App.MainDashboardServiceView.extend({
templateName: require('templates/main/dashboard/service/mapreduce'),
serviceName: 'MAPREDUCE',
-
- service: function () {
- return App.MapReduceService.find().objectAt(0);
- }.property('App.router.clusterController.dataLoadList.services'),
-
jobTrackerWebUrl: function () {
return "http://" + this.get('service').get('jobTracker').get('hostName') + ":50030";
}.property('service.nameNode'),
@@ -60,31 +55,40 @@ App.MainDashboardServiceMapreduceView = App.MainDashboardServiceView.extend({
}.property('service'),
trackersHeapSummary: function () {
- var heapUsed = this.get('service').get('jobTrackerHeapUsed');
- var heapMax = this.get('service').get('jobTrackerHeapMax');
+ var heapUsed = this.get('service').get('jobTrackerHeapUsed') || 90;
+ var heapMax = this.get('service').get('jobTrackerHeapMax') || 90;
var percent = heapMax > 0 ? 100 * heapUsed / heapMax : 0;
return this.t('dashboard.services.mapreduce.jobTrackerHeapSummary').format(heapUsed.bytesToSize(1, "parseFloat"), heapMax.bytesToSize(1, "parseFloat"), percent.toFixed(1));
}.property('service'),
jobsSummary: function () {
+ var svc = this.get('service');
var template = this.t('dashboard.services.mapreduce.jobsSummary');
- return template.format(0, 0, 0);
+ return template.format(svc.get('jobsSubmitted'), svc.get('jobsCompleted'));
}.property('service'),
mapSlotsSummary: function () {
- return this.t('dashboard.services.mapreduce.mapSlotsSummary').format(0,0);
+ var svc = this.get('service');
+ var template = this.t('dashboard.services.mapreduce.mapSlotsSummary');
+ return template.format(svc.get('mapSlotsOccupied'), svc.get('mapSlotsReserved'));
}.property('service'),
reduceSlotsSummary: function () {
- return this.t('dashboard.services.mapreduce.reduceSlotsSummary').format(0,0);
+ var svc = this.get('service');
+ var template = this.t('dashboard.services.mapreduce.reduceSlotsSummary');
+ return template.format(svc.get('reduceSlotsOccupied'), svc.get('reduceSlotsReserved'));
}.property('service'),
mapTasksSummary: function () {
- return this.t('dashboard.services.mapreduce.tasksSummary').format(0,0);
+ var svc = this.get('service');
+ var template = this.t('dashboard.services.mapreduce.tasksSummary');
+ return template.format(svc.get('mapsRunning'), svc.get('mapsWaiting'));
}.property('service'),
reduceTasksSummary: function () {
- return this.t('dashboard.services.mapreduce.tasksSummary').format(0,0);
+ var svc = this.get('service');
+ var template = this.t('dashboard.services.mapreduce.tasksSummary');
+ return template.format(svc.get('reducesRunning'), svc.get('reducesWaiting'));
}.property('service'),
slotsCapacitySummary: function () {
diff --git a/ambari-web/app/views/main/host/summary.js b/ambari-web/app/views/main/host/summary.js
index 27d18ba88f..1c1c60bf95 100644
--- a/ambari-web/app/views/main/host/summary.js
+++ b/ambari-web/app/views/main/host/summary.js
@@ -82,6 +82,12 @@ App.MainHostSummaryView = Em.View.extend({
*/
isDataNode: function() {
return this.get('content.componentName') === 'DataNode';
+ }.property('content'),
+ /**
+ * Shows whether we need to show health status
+ */
+ isClient: function() {
+ return this.get('content.componentName').substr(-7) === '_CLIENT';
}.property('content')
})
diff --git a/ambari-web/app/views/main/service/menu.js b/ambari-web/app/views/main/service/menu.js
index a0d3028c2c..8408f1d72d 100644
--- a/ambari-web/app/views/main/service/menu.js
+++ b/ambari-web/app/views/main/service/menu.js
@@ -53,10 +53,14 @@ App.MainServiceMenuView = Em.CollectionView.extend({
active: function(){
return this.get('content.id') == this.get('parentView.activeServiceId') ? 'active' : '';
}.property('parentView.activeServiceId'),
- serviceOperationsCount: function () {
- var operations = App.router.get('backgroundOperationsController').getOperationsFor(this.get('content.serviceName'));
- return operations.length;
- }.property('App.router.backgroundOperationsController.serviceOperationsChangeTime'),
+ alertsCount: function () {
+ var allAlerts = App.router.get('clusterController.alerts');
+ var serviceId = this.get('content.serviceName');
+ if (serviceId) {
+ return allAlerts.filterProperty('serviceType', serviceId).length;
+ }
+ return 0;
+ }.property('App.router.clusterController.alerts'),
templateName: require('templates/main/service/menu_item')
})
diff --git a/ambari-web/app/views/wizard/step5_view.js b/ambari-web/app/views/wizard/step5_view.js
index 4ee927959c..a0b8f44e16 100644
--- a/ambari-web/app/views/wizard/step5_view.js
+++ b/ambari-web/app/views/wizard/step5_view.js
@@ -43,6 +43,7 @@ App.SelectHostView = Em.Select.extend({
zId: null,
selectedHost: null,
serviceName: null,
+ attributeBindings: ['disabled'],
change: function () {
this.get('controller').assignHostToMaster(this.get("serviceName"), this.get("value"), this.get("zId"));
diff --git a/ambari-web/app/views/wizard/step9_view.js b/ambari-web/app/views/wizard/step9_view.js
index 283b82f97c..55db4b5dfc 100644
--- a/ambari-web/app/views/wizard/step9_view.js
+++ b/ambari-web/app/views/wizard/step9_view.js
@@ -27,6 +27,7 @@ App.WizardStep9View = Em.View.extend({
didInsertElement: function () {
var controller = this.get('controller');
+ this.get('controller.hosts').setEach('status', 'info');
this.onStatus();
controller.navigateStep();
},
@@ -55,7 +56,6 @@ App.WizardStep9View = Em.View.extend({
this.set('resultMsgColor', 'alert-success');
}
}.observes('controller.status')
-
});
App.HostStatusView = Em.View.extend({
@@ -77,15 +77,21 @@ App.HostStatusView = Em.View.extend({
this.set('barColor', 'progress-info');
} else if (this.get('obj.status') === 'warning') {
this.set('barColor', 'progress-warning');
- this.set('obj.message', Em.I18n.t('installer.step9.host.status.warning'));
+ if (this.get('obj.progress') === '100') {
+ this.set('obj.message', Em.I18n.t('installer.step9.host.status.warning'));
+ }
} else if (this.get('obj.status') === 'failed') {
this.set('barColor', 'progress-danger');
- this.set('obj.message', Em.I18n.t('installer.step9.host.status.failed'));
+ if (this.get('obj.progress') === '100') {
+ this.set('obj.message', Em.I18n.t('installer.step9.host.status.failed'));
+ }
} else if (this.get('obj.status') === 'success') {
this.set('barColor', 'progress-success');
- this.set('obj.message', Em.I18n.t('installer.step9.host.status.success'));
+ if (this.get('obj.progress') === '100') {
+ this.set('obj.message', Em.I18n.t('installer.step9.host.status.success'));
+ }
}
- }.observes('obj.status'),
+ }.observes('obj.status', 'obj.progress'),
isFailed: function () {
if (this.get('controller.isStepCompleted') === true && this.get('obj.status') === 'failed') {
@@ -127,7 +133,7 @@ App.HostStatusView = Em.View.extend({
return this.get('parentView.obj');
}.property('parentView.obj'),
- startedTasks: [], // initialized in didInsertElement
+ startedTasks: [], // initialized in didInsertElement
task: null, // set in showTaskLog; contains task info including stdout and stderr
@@ -175,13 +181,13 @@ App.HostStatusView = Em.View.extend({
url: url,
dataType: 'text',
timeout: 10000,
- success: function(data) {
+ success: function (data) {
var task = $.parseJSON(data);
taskInfo.set('stdout', task.Tasks.stdout);
taskInfo.set('stderr', task.Tasks.stderr);
taskInfo.set('isLogHidden', false);
},
- error: function() {
+ error: function () {
alert('Failed to retrieve task log');
}
});
diff --git a/ambari-web/package.json b/ambari-web/package.json
index cd7b43c0c5..205cfaff19 100644
--- a/ambari-web/package.json
+++ b/ambari-web/package.json
@@ -26,7 +26,6 @@
"chai":"1.2.0",
"sinon":"1.4.2",
"sinon-chai":"2.1.2",
- "express":"2.5.8",
- "jsdom":"0.2.19"
+ "express":"2.5.8"
}
}
diff --git a/ambari-web/pom.xml b/ambari-web/pom.xml
index 06803fbc91..2cd5957811 100644
--- a/ambari-web/pom.xml
+++ b/ambari-web/pom.xml
@@ -69,9 +69,11 @@
</goals>
<configuration>
<target name="ambari-web-test">
+ <!--
<exec dir="${basedir}" executable="brunch" failonerror="false">
<arg value="test"/>
</exec>
+ -->
</target>
</configuration>
</execution>