You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2012/11/07 05:00:25 UTC

svn commit: r1406442 [3/4] - in /incubator/ambari/branches/AMBARI-666: ./ ambari-web/ ambari-web/app/ ambari-web/app/assets/data/apps/ ambari-web/app/controllers/ ambari-web/app/controllers/installer/ ambari-web/app/controllers/main/ ambari-web/app/con...

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_1.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_1.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_1.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_1.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "PENDING",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "PENDING",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_2.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_2.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_2.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_2.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_3.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_3.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_3.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_3.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "IN_PROGRESS",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_4.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_4.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_4.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_4.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "IN_PROGRESS",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_5.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_5.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_5.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_5.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "INSTALL",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_6.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_6.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_6.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_6.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_7.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_7.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_7.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_7.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "QUEUED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "IN_PROGRESS",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_8.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_8.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_8.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_8.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "IN_PROGRESS",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_9.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_9.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_9.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/mock/step9PolledData/pollData_9.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+module.exports = {
+  "href" : "http://localhost:8080/api/clusters/mycluster/requests/1",
+  "Requests" : {
+    "id" : 1
+  },
+  "tasks" : [
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/1",
+      "Tasks" : {
+        "id" : "1",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "DATANODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    },
+    {
+      "href" : "http://localhost:8080/api/clusters/mycluster/requests/1/tasks/2",
+      "Tasks" : {
+        "id" : "2",
+        "attempt_cnt" : "0",
+        "exit_code" : "999",
+        "stdout" : "",
+        "status" : "COMPLETED",
+        "command" : "START",
+        "start_time" : "-1",
+        "role" : "NAMENODE",
+        "stderr" : "",
+        "host_name" : "localhost.localdomain",
+        "stage_id" : "1"
+      }
+    }
+  ]
+}
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js Wed Nov  7 04:00:21 2012
@@ -45,7 +45,7 @@ module.exports = new Ember.Set([
   {
     service_name: 'HDFS',
     component_name: 'HDFS_CLIENT',
-    display_name: 'HDFS Client',
+    display_name: 'Hadoop Client',
     isMaster: false,
     isClient: true,
     description: 'Client component for HDFS'
@@ -116,16 +116,16 @@ module.exports = new Ember.Set([
   },
   {
     service_name: 'PIG',
-    component_name: 'PIG_CLIENT',
-    display_name: 'Pig Client',
+    component_name: 'PIG',
+    display_name: 'Pig',
     isMaster: false,
     isClient: true,
     description: ''
   },
   {
     service_name: 'SQOOP',
-    component_name: 'SQOOP_CLIENT',
-    display_name: 'Sqoop Client',
+    component_name: 'SQOOP',
+    display_name: 'Sqoop',
     isMaster: false,
     isClient: true,
     description: ''

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js Wed Nov  7 04:00:21 2012
@@ -21,6 +21,9 @@ module.exports = {
 	200: function () {
 		console.log("Status code 200: Success.");
 	},
+  202: function () {
+    console.log("Status code 202: Success for creation.");
+  },
 	400: function () {
 		console.log("Error code 400: Bad Request.");
 	},

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Wed Nov  7 04:00:21 2012
@@ -186,10 +186,8 @@ Em.I18n.translations = {
 
   'services.service.start': 'Start',
   'services.service.stop': 'Stop',
-  'services.service.start.popup.header': 'Confirmation',
-  'services.service.stop.popup.header': 'Confirmation',
-  'services.service.start.popup.body': 'Are you sure?',
-  'services.service.stop.popup.body': 'Are you sure?',
+  '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',
@@ -225,6 +223,8 @@ Em.I18n.translations = {
   'services.service.actions.run.smoke': 'Run Smoke Test',
   'services.service.actions.maintenance': 'Maintenance',
 
+  'services.add.header': 'Add Service Wizard',
+
   'hosts.host.start.popup.header': 'Confirmation',
   'hosts.host.stop.popup.header': 'Confirmation',
   'hosts.host.start.popup.body': 'Are you sure?',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js Wed Nov  7 04:00:21 2012
@@ -33,7 +33,49 @@ App.Host = DS.Model.extend({
   cpuUsage: DS.attr('number'),
   memoryUsage: DS.attr('number'),
   networkUsage: DS.attr('number'),
-  ioUsage: DS.attr('number')
+  ioUsage: DS.attr('number'),
+  lastHeartBeatTime: DS.attr('number'),
+
+
+  /**
+   * Return true if host not heartbeating last 180 seconds
+   */
+  isNotHeartBeating : function(){
+    return ((new Date()).getTime() - this.get('lastHeartBeatTime')) > 180 * 1000;
+  }.property('lastHeartBeatTime'),
+
+  updateHostStatus: function(){
+
+    /**
+     * Do nothing until load
+     */
+    if(!this.get('isLoaded') || !this.get('components').everyProperty('isLoaded', true)){
+      return;
+    }
+
+    var components = this.get('components');
+    var status;
+
+    var masterComponents = components.filterProperty('isMaster', true);
+    if(components.everyProperty('workStatus', "STARTED")){
+      status = 'LIVE';
+    } else if(false && this.get('isNotHeartBeating')){ //todo uncomment on real data
+      status = 'DEAD-YELLOW';
+    } else if(masterComponents.length > 0 && !masterComponents.everyProperty('workStatus', "STARTED")){
+      status = 'DEAD';
+    } else{
+      status = 'DEAD-ORANGE';
+    }
+
+    if(status){
+      this.set('healthStatus', status);
+     // console.log('set ' + status + ' for ' + this.get('hostName'));
+    }
+  }.observes('components.@each.workStatus'),
+
+  healthClass: function(){
+    return 'health-status-' + this.get('healthStatus');
+  }.property('healthStatus')
 });
 
 App.Host.FIXTURES = [
@@ -41,7 +83,7 @@ App.Host.FIXTURES = [
     id: 1,
     host_name: 'z_host1',
     cluster_id: 1,
-    components:[1, 3, 4, 5, 8],
+    components:[1, 3],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '40',
@@ -51,13 +93,14 @@ App.Host.FIXTURES = [
     cpu_usage: 33,
     memory_usage: 26,
     network_usage: 36,
-    io_usage: 39
+    io_usage: 39,
+    last_heart_beat_time : 1351536732366
   },
   {
     id: 2,
     host_name: 'host2',
     cluster_id: 1,
-    components:[1, 3, 4, 5, 8],
+    components:[4, 5, 8],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -67,13 +110,14 @@ App.Host.FIXTURES = [
     cpu_usage: 36,
     memory_usage: 29,
     network_usage: 56,
-    io_usage: 69
+    io_usage: 69,
+    lastHeartBeatTime : 1351536732366
   },
   {
     id: 3,
     host_name: 'n_host3',
     cluster_id: 2,
-    components:[4, 5, 7],
+    components:[7],
     health_status: 'DEAD-YELLOW',
     cpu_usage: 23,
     memory_usage: 16,
@@ -84,7 +128,7 @@ App.Host.FIXTURES = [
     id: 4,
     host_name: 'b_host4',
     cluster_id: 2,
-    components:[1, 2, 4, 5],
+    components:[],
     health_status: 'DEAD',
     cpu_usage: 23,
     memory_usage: 36,
@@ -95,7 +139,7 @@ App.Host.FIXTURES = [
     id: 5,
     host_name: 'host5',
     cluster_id: 1,
-    components:[3, 4, 5],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -111,7 +155,7 @@ App.Host.FIXTURES = [
     id: 6,
     host_name: 'a_host6',
     cluster_id: 1,
-    components:[5],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -127,7 +171,7 @@ App.Host.FIXTURES = [
     id: 7,
     host_name: 'host7',
     cluster_id: 1,
-    components:[3, 4, 7],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -143,7 +187,7 @@ App.Host.FIXTURES = [
     id: 8,
     host_name: 'host8',
     cluster_id: 1,
-    components:[3, 4, 7],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -159,7 +203,7 @@ App.Host.FIXTURES = [
     id: 9,
     host_name: 'host9',
     cluster_id: 1,
-    components:[3, 4, 7],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',
@@ -175,7 +219,7 @@ App.Host.FIXTURES = [
     id: 10,
     host_name: 'host10',
     cluster_id: 1,
-    components:[3, 4, 7],
+    components:[],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js Wed Nov  7 04:00:21 2012
@@ -21,7 +21,7 @@ var App = require('app');
 
 App.Job = DS.Model.extend({
   jobId:DS.attr('string'),
-  workflow:DS.belongsTo('App.Workflow'),
+  workflow:DS.belongsTo('App.Run'),
   jobName:DS.attr('string'),
   workflowEntityName:DS.attr('string'),
   userName:DS.attr('string'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js Wed Nov  7 04:00:21 2012
@@ -62,7 +62,7 @@ App.Component = DS.Model.extend({
   type:DS.attr('boolean'),
   service:DS.belongsTo('App.Service'),
   host:DS.belongsTo('App.Host'),
-  workStatus:DS.attr('boolean'),
+  workStatus:DS.attr('string'),
   isMaster:function () {
     return this.get('type');
   }.property('type'),
@@ -73,6 +73,13 @@ App.Component = DS.Model.extend({
   decommissioned: DS.attr('boolean')
 });
 
+App.Component.Status = {
+  started:"STARTED",
+  starting:"STARTING",
+  stopped:"STOPPED",
+  stopping:"STOPPING"
+}
+
 App.Component.FIXTURES = [
   {
     id:1,
@@ -81,7 +88,7 @@ App.Component.FIXTURES = [
     type:true,
     service_id:1,
     host_id:1,
-    work_status:false
+    work_status:App.Component.Status.stopped
   },
   {
     id:2,
@@ -90,7 +97,7 @@ App.Component.FIXTURES = [
     type:true,
     service_id:1,
     host_id:2,
-    work_status:true
+    work_status:App.Component.Status.started
   },
   {
     id:3,
@@ -99,7 +106,7 @@ App.Component.FIXTURES = [
     service_id:1,
     type:false,
     host_id:2,
-    work_status:true,
+    work_status:App.Component.Status.started,
     decommissioned: true
   },
   {
@@ -109,7 +116,7 @@ App.Component.FIXTURES = [
     type:true,
     service_id:2,
     host_id:4,
-    work_status:true
+    work_status:App.Component.Status.started
   },
   {
     id:5,
@@ -118,7 +125,7 @@ App.Component.FIXTURES = [
     type:false,
     service_id:2,
     host_id:4,
-    work_status:true
+    work_status:App.Component.Status.started
   },
   {
     id:6,
@@ -127,7 +134,7 @@ App.Component.FIXTURES = [
     type:true,
     service_id:3,
     host_id:4,
-    work_status:true
+    work_status:App.Component.Status.started
   },
   {
     id:7,
@@ -136,7 +143,7 @@ App.Component.FIXTURES = [
     type:false,
     service_id:3,
     host_id:2,
-    work_status:true
+    work_status:App.Component.Status.started
   },
   {
     id:8,
@@ -145,7 +152,7 @@ App.Component.FIXTURES = [
     type:false,
     service_id:5,
     host_id:2,
-    work_status:true
+    work_status:App.Component.Status.started
   }
 ];
 
@@ -188,7 +195,7 @@ App.Service.FIXTURES = [
     health_status:App.Service.Health.start,
     work_status:true,
     alerts:[3, 4],
-    quick_links:[5, 6, 7, 8, 9, 10]
+    quick_links:[5, 6, 7, 8, 9, 10, 17, 18]
   },
   {
     id:3,
@@ -198,7 +205,7 @@ App.Service.FIXTURES = [
     health_status:App.Service.Health.dead,
     work_status:false,
     alerts:[5, 6],
-    quick_links:[11, 12, 13, 14]
+    quick_links:[11, 12, 13, 14, 15, 16]
   },
   {
     id:4,
@@ -235,71 +242,91 @@ App.QuickLinks.FIXTURES = [
   {
     id:1,
     label:'NameNode UI',
-    url:''
+    url:'http://%@:50070/dfshealth.jsp'
   },
   {
     id:2,
     label:'NameNode logs',
-    url:''
+    url:'http://%@:50070/logs'
   },
   {
     id:3,
     label:'NameNode JMX',
-    url:''
+    url:'http://%@:50070/jmx'
   },
   {
     id:4,
     label:'Thread Stacks',
-    url:''
+    url:'http://%@:50070/stacks'
   },
   {
     id:5,
     label:'JobTracker UI',
-    url:''
+    url:'http://%@:50030/jobtracker.jsp'
   },
   {
     id:6,
     label:'Scheduling Info',
-    url:''
+    url:'http://%@:50030/scheduler'
   },
   {
     id:7,
     label:'Running Jobs',
-    url:''
+    url:'http://%@:50030/jobtracker.jsp#running_jobs'
   },
   {
     id:8,
     label:'Retired Jobs',
-    url:''
+    url:'http://%@:50030/jobtracker.jsp#retired_jobs'
   },
   {
     id:9,
     label:'JobHistory Server',
-    url:''
+    url:'http://%@:51111/jobhistoryhome.jsp'
   },
   {
     id:10,
     label:'JobTracker Logs',
-    url:''
+    url:'http://%@:50030/logs'
   },
   {
     id:11,
     label:'HBase Master UI',
-    url:''
+    url:'http://%@:60010/master-status'
   },
   {
     id:12,
     label:'HBase Logs',
-    url:''
+    url:'http://%@:60010/logs'
   },
   {
     id:13,
     label:'Zookeeper Info',
-    url:''
+    url:'http://%@:60010/zk.jsp'
   },
   {
     id:14,
     label:'HBase Master JMX',
-    url:''
+    url:'http://%@:60010/jmx'
+  },
+  {
+    id:15,
+    label:'Debug Dump',
+    url:'http://%@:60010/dump'
+  },
+  {
+    id:16,
+    label:'Thread Stacks',
+    url:'http://%@:60010/stacks'
+  },
+  {
+    id:17,
+    label:'JobTracker JMX',
+    url:'http://%@:50030/jmx'
+  },
+  {
+    id:18,
+    label:'Thread Stacks',
+    url:'http://%@:50030/stacks'
   }
 ];

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js Wed Nov  7 04:00:21 2012
@@ -109,33 +109,33 @@ App.ServiceConfigProperty = Ember.Object
     var masterComponentHostsInDB = App.db.getMasterComponentHosts();
     switch (this.get('name')) {
       case 'namenode.host':
-        var temp = masterComponentHostsInDB.findProperty('component','NameNode');
+        var temp = masterComponentHostsInDB.findProperty('component','NAMENODE');
         console.log("this is temp: " + temp.hostName);
         this.set('value', temp.hostName);
         break;
       case 'snamenode.host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','SNameNode').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','SNAMENODE').hostName);
         break;
       case 'jobtracker.host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','JobTracker').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','JOBTRACKER').hostName);
         break;
       case 'hbasemaster.host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','HBase Master').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','HBASE_MASTER').hostName);
         break;
       case 'zookeeperserver.hosts':
-        this.set('value', masterComponentHostsInDB.filterProperty('component','ZooKeeper').mapProperty('hostName'));
+        this.set('value', masterComponentHostsInDB.filterProperty('component','ZOOKEEPER_SERVER').mapProperty('hostName'));
         break;
       case 'hivemetastore.host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','Hive Metastore').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','HIVE_SERVER').hostName);
         break;
       case 'hive_ambari_host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','Hive Metastore').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','HIVE_SERVER').hostName);
         break;
       case 'oozieserver.host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','Oozie Server').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','OOZIE_SERVER').hostName);
         break;
       case 'oozie_ambari_host':
-        this.set('value', masterComponentHostsInDB.findProperty('component','Oozie Server').hostName);
+        this.set('value', masterComponentHostsInDB.findProperty('component','OOZIE_SERVER').hostName);
         break;
     }
   },

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js Wed Nov  7 04:00:21 2012
@@ -34,39 +34,20 @@ App.Router = Em.Router.extend({
   },
 
   clearAllSteps: function() {
-    /*var totalSteps = 10
-    for (var step = 1; step <= totalSteps; step++){
-      this.get('installerStep' + step + 'Controller').clearStep();
-    }*/
-  },
-
-  /*
-  loadAllPriorSteps: function(step) {
-    var stepVal = parseInt(step);
-    switch(step){
-      case '10':
-        this.get('installerStep9Controller').loadStep();
-      case '9':
-        this.get('installerStep8Controller').loadStep();
-      case '8':
-        this.get('installerStep7Controller').loadStep();
-      case '7':
-        this.get('installerStep6Controller').loadStep();
-      case '6':
-        this.get('installerStep5Controller').loadStep();
-      case '5':
-        this.get('installerStep4Controller').loadStep();
-      case '4':
-        this.get('installerStep3Controller').loadStep();
-      case '3':
-        this.get('installerStep2Controller').loadStep();
-      case '2':
-        this.get('installerStep1Controller').loadStep();
-      case '1':
-
-    }
+    this.get('installerController.content').set('cluster',null);
+    /*this.get('installerController.content').set({
+      cluster: null,
+      hosts: null,
+      services: null,
+      hostsInfo: null,
+      slaveComponentHosts: null,
+      hostSlaveComponents: null,
+      masterComponentHosts: null,
+      hostToMasterComponent : null,
+      serviceConfigProperties: null
+    });*/
   },
-  */
+
 
   setInstallerCurrentStep: function (currentStep, completed) {
     App.db.setInstallerCurrentStep(currentStep, completed);
@@ -255,6 +236,7 @@ App.Router = Em.Router.extend({
       console.log('logging off');
       router.clearAllSteps();
       App.db.cleanUp();
+      console.log("Log off: " + App.db.getClusterName());
       router.set('loginController.loginName', '');
       router.set('loginController.password', '');
       router.transitionTo('login', context);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js Wed Nov  7 04:00:21 2012
@@ -66,7 +66,10 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep2', controller.get('content.hosts'));
     },
 
-    next: Em.Router.transitionTo('step2'),
+    next: function (router) {
+      router.transitionTo('step2');
+      App.db.setBootStatus(false);
+    },
     evaluateStep: function (router) {
       console.log('in addHost.step1:evaluateStep');
       var addHostController = router.get('addHostController');
@@ -88,21 +91,18 @@ module.exports = Em.Route.extend({
       var controller = router.get('addHostController');
       controller.setCurrentStep('2', false);
       controller.loadAllPriorSteps();
-      router.get('wizardStep3Controller').set('data', controller.getHostList(true)); // workaround
-      controller.connectOutlet('wizardStep3', controller.getHostList(true));
+      controller.connectOutlet('wizardStep3', controller.get('content'));
     },
     back: Em.Router.transitionTo('step1'),
-    next: function (router) {
-      console.log('in addHost.step2:next');
+    next: function (router, context) {
       var addHostController = router.get('addHostController');
       var wizardStep3Controller = router.get('wizardStep3Controller');
+      addHostController.saveConfirmedHosts(wizardStep3Controller);
 
-      if (wizardStep3Controller.get('isSubmitDisabled') === false) {
-        addHostController.saveConfirmedHosts(wizardStep3Controller);
-        router.transitionTo('step3');
-      }
+      App.db.setBootStatus(true);
+      App.db.setService(require('data/mock/services'));
+      router.transitionTo('step3');
     },
-
     /**
      * Wrapper for remove host action.
      * Since saving data stored in addHostController, we should call this from router
@@ -208,7 +208,13 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep8', controller.get('content'));
     },
     back: Em.Router.transitionTo('step6'),
-    next: Em.Router.transitionTo('step8')
+    next: function (router) {
+      var addHostController = router.get('addHostController');
+      var wizardStep8Controller = router.get('wizardStep8Controller');
+      addHostController.installServices();
+      addHostController.setInfoForStep9();
+      router.transitionTo('step8');
+    }
   }),
 
   step8: Em.Route.extend({
@@ -222,6 +228,12 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep9', controller.get('content'));
     },
     back: Em.Router.transitionTo('step7'),
+    retry: function(router,context) {
+      var addHostController = router.get('addHostController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      addHostController.installServices();
+      wizardStep9Controller.navigateStep();
+    },
     next: function (router) {
       var addHostController = router.get('addHostController');
       var wizardStep9Controller = router.get('wizardStep9Controller');

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js Wed Nov  7 04:00:21 2012
@@ -0,0 +1,202 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+module.exports = Em.Route.extend({
+  route: '/services/add',
+
+  enter: function (router) {
+    console.log('in /service/add:enter');
+
+    Ember.run.next(function () {
+      var addServiceController = router.get('addServiceController');
+      addServiceController.loadAllPriorSteps();
+      router.transitionTo('step' + addServiceController.get('currentStep'));
+    });
+
+  },
+
+  connectOutlets: function (router) {
+    console.log('in /service/add:connectOutlets');
+    router.get('mainController').connectOutlet('addService');
+  },
+
+  step1: Em.Route.extend({
+    route: '/step1',
+    connectOutlets: function (router) {
+      console.log('in addService.step1:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('1', false);
+      controller.set('hideBackButton', true);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep4', controller.get('content.services'));
+    },
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep4Controller = router.get('wizardStep4Controller');
+      addServiceController.saveServices(wizardStep4Controller);
+      addServiceController.saveClients(wizardStep4Controller);
+      App.db.setMasterComponentHosts(undefined);
+      App.db.setHostToMasterComponent(undefined);
+      router.transitionTo('step2');
+    }
+  }),
+
+  step2: Em.Route.extend({
+    route: '/step2',
+    connectOutlets: function (router) {
+      console.log('in addService.step2:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('2', false);
+      controller.loadAllPriorSteps();
+      controller.set('hideBackButton', false);
+      controller.connectOutlet('wizardStep5', controller.get('content'));
+
+    },
+    back: Em.Router.transitionTo('step1'),
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep5Controller = router.get('wizardStep5Controller');
+      addServiceController.saveMasterComponentHosts(wizardStep5Controller);
+      App.db.setSlaveComponentHosts(undefined);
+      router.transitionTo('step3');
+    }
+  }),
+
+  step3: Em.Route.extend({
+    route: '/step3',
+    connectOutlets: function (router) {
+      console.log('in addService.step3:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('3', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep6', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step2'),
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep6Controller = router.get('wizardStep6Controller');
+
+      if (wizardStep6Controller.validate()) {
+        addServiceController.saveSlaveComponentHosts(wizardStep6Controller);
+        App.db.setServiceConfigProperties(null);
+        router.transitionTo('step4');
+      }
+    }
+  }),
+
+  step4: Em.Route.extend({
+    route: '/step4',
+    connectOutlets: function (router) {
+      console.log('in addService.step4:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('4', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep7', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step3'),
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep7Controller = router.get('wizardStep7Controller');
+      addServiceController.saveServiceConfigProperties(wizardStep7Controller);
+      router.transitionTo('step5');
+    }
+  }),
+
+  step5: Em.Route.extend({
+    route: '/step5',
+    connectOutlets: function (router, context) {
+      console.log('in addService.step5:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('5', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep8', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step4'),
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep8Controller = router.get('wizardStep8Controller');
+      addServiceController.installServices();
+      addServiceController.setInfoForStep9();
+      router.transitionTo('step6');
+    }
+  }),
+
+  step6: Em.Route.extend({
+    route: '/step6',
+    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'));
+    },
+    back: Em.Router.transitionTo('step5'),
+    retry: function(router,context) {
+      var addServiceController = router.get('addSrviceController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      addServiceController.installServices();
+      wizardStep9Controller.navigateStep();
+    },
+    next: function (router) {
+      var addServiceController = router.get('addServiceController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      addServiceController.saveClusterInfo(wizardStep9Controller);
+      addServiceController.saveInstalledHosts(wizardStep9Controller);
+      router.transitionTo('step7');
+    }
+  }),
+
+  step7: Em.Route.extend({
+    route: '/step7',
+    connectOutlets: function (router, context) {
+      console.log('in addService.step7:connectOutlets');
+      var controller = router.get('addServiceController');
+      controller.setCurrentStep('7', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep10');
+    },
+    back: Em.Router.transitionTo('step6'),
+    complete: function (router, context) {
+      if (true) {   // this function will be moved to installerController where it will validate
+        var addServiceController = router.get('addServiceController');
+        addServiceController.setCurrentStep('1', false);
+        router.transitionTo('services');
+      }
+    }
+  }),
+
+  gotoStep1: Em.Router.transitionTo('step1'),
+
+  gotoStep2: Em.Router.transitionTo('step2'),
+
+  gotoStep3: Em.Router.transitionTo('step3'),
+
+  gotoStep4: Em.Router.transitionTo('step4'),
+
+  gotoStep5: Em.Router.transitionTo('step5'),
+
+  gotoStep6: Em.Router.transitionTo('step6'),
+
+  gotoStep7: Em.Router.transitionTo('step7'),
+
+  backToServices: function (router) {
+    router.transitionTo('services');
+  }
+
+});

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js Wed Nov  7 04:00:21 2012
@@ -79,37 +79,67 @@ module.exports = Em.Route.extend({
     route: '/step2',
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step2');
+      var controller = router.get('installerController');
       router.setInstallerCurrentStep('2', false);
-      router.get('installerController').connectOutlet('installerStep2');
+
+      var controller = router.get('installerController');
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep2', controller.get('content.hosts'));
     },
     back: Em.Router.transitionTo('step1'),
-    next: function (router, context) {
+    next: function (router) {
+      router.transitionTo('step3');
       App.db.setBootStatus(false);
-      var hosts = App.db.getHosts();
-      var hostInfo = {};
-      for (var index in hosts) {
-        hostInfo[index] = {
-          name: hosts[index].name,
-          bootStatus: 'pending'
-        };
+    },
+
+    /**
+     * Validate form before doing anything
+     * @param router
+     */
+    evaluateStep: function (router) {
+
+      var controller = router.get('installerController');
+      var wizardStep2Controller = router.get('wizardStep2Controller');
+
+      wizardStep2Controller.set('hasSubmitted', true);
+
+      if (!wizardStep2Controller.get('isSubmitDisabled')) {
+        App.db.setBootStatus(false);
+        controller.saveHosts(wizardStep2Controller);
+        wizardStep2Controller.evaluateStep();
       }
-      App.db.setHosts(hostInfo);
-      router.transitionTo('step3');
     }
   }),
 
   step3: Em.Route.extend({
     route: '/step3',
-    connectOutlets: function (router, context) {
-      router.setNavigationFlow('step3');
+    connectOutlets: function (router) {
+      console.log('in installer.step3:connectOutlets');
+      var controller = router.get('installerController');
       router.setInstallerCurrentStep('3', false);
-      router.get('installerController').connectOutlet('installerStep3');
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep3', controller.get('content'));
     },
     back: Em.Router.transitionTo('step2'),
     next: function (router, context) {
+      var installerController = router.get('installerController');
+      var wizardStep3Controller = router.get('wizardStep3Controller');
+      installerController.saveConfirmedHosts(wizardStep3Controller);
+
       App.db.setBootStatus(true);
       App.db.setService(require('data/mock/services'));
       router.transitionTo('step4');
+    },
+    /**
+     * Wrapper for remove host action.
+     * Since saving data stored in installerController, we should call this from router
+     * @param router
+     * @param context Array of hosts to delete
+     */
+    removeHosts: function (router, context) {
+      console.log('in installer.step2.removeHosts:hosts to delete ', context);
+      var controller = router.get('installerController');
+      controller.removeHosts(context);
     }
   }),
 
@@ -118,12 +148,13 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step4');
       router.setInstallerCurrentStep('4', false);
-
       var controller = router.get('installerController');
       controller.loadAllPriorSteps();
+      controller.loadServices();
       controller.connectOutlet('wizardStep4', controller.get('content.services'));
     },
     back: Em.Router.transitionTo('step3'),
+
     next: function (router) {
       var controller = router.get('installerController');
       var wizardStep4Controller = router.get('wizardStep4Controller');
@@ -160,18 +191,19 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step6');
       router.setInstallerCurrentStep('6', false);
-
       var controller = router.get('installerController');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep6', controller.get('content'));
     },
     back: Em.Router.transitionTo('step5'),
+
     next: function (router) {
       var controller = router.get('installerController');
       var wizardStep6Controller = router.get('wizardStep6Controller');
 
       if (wizardStep6Controller.validate()) {
         controller.saveSlaveComponentHosts(wizardStep6Controller);
+        controller.get('content').set('serviceConfigProperties', null);
         App.db.setServiceConfigProperties(null);
         router.transitionTo('step7');
       }
@@ -187,10 +219,10 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep7', controller.get('content'));
     },
     back: Em.Router.transitionTo('step6'),
-    next: function(router){
+    next: function (router) {
       var installerController = router.get('installerController');
       var wizardStep7Controller = router.get('wizardStep7Controller');
-      installerController.saveServiceConfigProperties( wizardStep7Controller );
+      installerController.saveServiceConfigProperties(wizardStep7Controller);
       router.transitionTo('step8');
     }
   }),
@@ -205,7 +237,13 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep8', controller.get('content'));
     },
     back: Em.Router.transitionTo('step7'),
-    next: Em.Router.transitionTo('step9')
+    next: function (router) {
+      var installerController = router.get('installerController');
+      var wizardStep8Controller = router.get('wizardStep8Controller');
+      installerController.installServices();
+      installerController.setInfoForStep9();
+      router.transitionTo('step9');
+    }
   }),
 
   step9: Em.Route.extend({
@@ -213,17 +251,22 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       console.log('in installer.step9:connectOutlets');
       var controller = router.get('installerController');
-      controller.setInfoForStep9();
       router.setInstallerCurrentStep('9', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep9', controller.get('content'));
     },
     back: Em.Router.transitionTo('step8'),
+    retry: function(router,context) {
+      var installerController = router.get('installerController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      installerController.installServices();
+      wizardStep9Controller.navigateStep();
+    },
     next: function (router) {
-      var addHostController = router.get('installerController');
+      var installerController = router.get('installerController');
       var wizardStep9Controller = router.get('wizardStep9Controller');
-      addHostController.saveClusterInfo(wizardStep9Controller);
-      addHostController.saveInstalledHosts(wizardStep9Controller);
+      installerController.saveClusterInfo(wizardStep9Controller);
+      installerController.saveInstalledHosts(wizardStep9Controller);
       router.transitionTo('step10');
     }
   }),
@@ -231,26 +274,6 @@ module.exports = Em.Route.extend({
   step10: Em.Route.extend({
     route: '/step10',
     connectOutlets: function (router, context) {
-      router.setNavigationFlow('step10');
-      router.setInstallerCurrentStep('10', false);
-      router.get('installerController').connectOutlet('installerStep10');
-    },
-    back: Em.Router.transitionTo('step9'),
-
-    complete: function (router, context) {
-      if (true) {   // this function will be moved to installerController where it will validate
-        router.setInstallerCurrentStep('1', true);
-        router.setSection('main');
-        router.transitionTo('main');
-      } else {
-        console.log('cluster installation failure');
-      }
-    }
-  }),
-
-  step10: Em.Route.extend({
-    route: '/step10',
-    connectOutlets: function (router, context) {
       console.log('in installer.step10:connectOutlets');
       var controller = router.get('installerController');
       router.setInstallerCurrentStep('10', false);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js Wed Nov  7 04:00:21 2012
@@ -366,9 +366,12 @@ module.exports = Em.Route.extend({
         router.transitionTo(event.context);
       }
     }),
-    showService:Em.Router.transitionTo('service')
+    showService:Em.Router.transitionTo('service'),
+    addService:Em.Router.transitionTo('serviceAdd')
   }),
 
+  serviceAdd:require('routes/add_service_routes'),
+
   selectService:Em.Route.transitionTo('services.service'),
   selectHost:function (router, event) {
     router.get('mainHostDetailsController').setBack(false);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less Wed Nov  7 04:00:21 2012
@@ -34,7 +34,7 @@ html, body {
 @footer-height: 100px;
 
 #main {
-  overflow: auto;
+  overflow: visible;
   padding-bottom: @footer-height;
 }
 
@@ -192,7 +192,7 @@ h1 {
   color: #FF4B4B;
 }
 
-#installer, #add-host {
+#installer, #add-host, #add-service {
   h2 {
     margin-top: 0;
   }
@@ -202,7 +202,7 @@ h1 {
   .btn-area {
     margin-top: 20px;
   }
-  #installer-content, #add-host-content {
+  #installer-content, #add-host-content, #add-service-content {
     padding: 25px;
     background-color: #fff;
 
@@ -781,16 +781,25 @@ a:focus {
       margin: 4px 5px 0 0;
       width: 13px;
     }
-    ul#filter-dropdown li {
-      display: block;
-      padding: 3px 0 3px 5px;
-      line-height: 20px;
-    }
-    ul#filter-dropdown li input[type="checkbox"] {
-      margin-top: 0;
-      margin-right: 2px;
-      margin-bottom: 2px;
-      margin: 0 2px 2px;
+    ul#filter-dropdown {
+      padding: 5px 25px 5px 0;
+
+      li {
+        display: block;
+        padding: 3px 0 3px 5px;
+        line-height: 20px;
+
+        label.checkbox {
+          padding-left: 3px;
+        }
+
+        input[type="checkbox"] {
+          margin-top: 0;
+          margin-right: 2px;
+          margin-bottom: 2px;
+          margin: 0 2px 2px;
+        }
+      }
     }
   }
   .open-group > .dropdown-menu {
@@ -847,6 +856,34 @@ a:focus {
   }
 
   #host-details {
+    .component-operation-button{
+      background-color: #E5E5E5;
+      background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
+      background-image: -webkit-linear-gradient(top, #E5E5E5, #F1F1F1);
+      background-image: -o-linear-gradient(top, #E5E5E5, #F1F1F1);
+      background-image: linear-gradient(to bottom, #E5E5E5, #F1F1F1);
+      background-image: -moz-linear-gradient(top, #E5E5E5, #F1F1F1);
+      background-repeat: repeat-x;
+      color:#000000;
+    }
+    .caret{
+      border-top-color: #000000;
+      border-bottom-color: #000000;
+    }
+    .health-status-STARTED, .health-status-STARTING {
+      background-image: @status-live-marker;
+      background-repeat: no-repeat;
+      background-position: 0px 4px;
+    }
+    .health-status-STOPPED, .health-status-STOPPING {
+      background-image: @status-dead-marker;
+      background-repeat: no-repeat;
+      background-position: 0px 4px;
+    }
+    .span3.host-components {
+        width: 300px;
+    }
+
     .health-status-LIVE {
       background-image: @status-live-marker;
       background-repeat: no-repeat;
@@ -903,6 +940,13 @@ a:focus {
     }
     .host-components .btn-group {
       margin: 0 5px 10px 0;
+      .components-health{
+        margin-top: 4px;
+        width:13px;
+        height: 13px;
+        float:left;
+        background-position: center center;
+      }
     }
   }
   .background-operations {
@@ -1378,6 +1422,10 @@ ul.filter {
 /* CHARTS END */
 
 /* UNIVERSAL STYLES */
+.align-right {
+  text-align: right;
+}
+
 .left {
   float: left;
 }
@@ -1552,13 +1600,18 @@ ul.inline li {
 
 /* End Carousel*/
 
-#add-host .back,
-#add-service .back {
+#add-host .back{
   display: block;
   width: 105px;
   margin-bottom: 10px;
 }
 
+#add-service .back{
+  display: block;
+  width: 130px;
+  margin-bottom: 10px;
+}
+
 #step8-content {
   max-height: 570px;
 }
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less Wed Nov  7 04:00:21 2012
@@ -1,41 +1,81 @@
-#apps {
+#apps{
+  .breadcrumbs {
+    padding-bottom: 16px;
+    margin-left: 16px;
+  }
+  .table thead th{
+    vertical-align:top;
+  }
+  .avg-table td {
+    text-align:center;
+    border:none;
+  }
+  td.avg-star{
+    border-left:1px solid #DDD;
+  }
+  .a {
+    width:25px;
+    height: 25px;
+    background-position: center center;
+    background-repeat: no-repeat;
+    position: relative;
+    left:50%;
+    margin-left:-13px;
+    margin-top: 36px;
+    font-size:30px;
+    color:red;
+  }
+  .avg-info {
+    font-size:16px;
+    font-weight:700;
+  }
+  .compare-info {
+    font-size:12px;
+  }
   .search-bar {
-    float: right;
-    margin-top: -40px;
+    float:right;
+  }
+  .clear {
+    clear:both;
   }
   .dataTable {
     border: 1px solid silver;
     th {
-      border-top: none;
+      border-top:none;
     }
   }
-  .dataTables_wrapper {
-    margin-top: 10px;
+  .app-table-row.hover{
+    opacity:0.8 ;
+  }
+  .app-table-row{
+    cursor: pointer;
   }
   #filter_info {
-    padding-top: 10px;
+    float:left;
+    padding-top:10px;
   }
   .page-bar {
     border: 1px solid silver;
-    text-align: right;
+    text-align:right;
     div {
       display: inline-block;
-      margin: 0 10px;
+      margin:0 10px;
     }
     .dataTables_length {
       label {
-        display: inline;
+        display:inline;
       }
       select {
         margin-bottom: 4px;
         margin-top: 4px;
-        width: 70px;
+        width:70px;
       }
     }
     .dataTables_paginate {
       a {
-        padding: 0 5px;
+        padding:0 5px;
       }
     }
   }
 }
+

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs Wed Nov  7 04:00:21 2012
@@ -16,50 +16,77 @@
 * limitations under the License.
 -->
 <div id="apps">
+  <div class="breadcrumbs">
+    <a href='#' {{action "routeHome" target="controller"}}><i class="icon-home"></i></a>&nbsp;&#47;&nbsp;
+    <strong>Apps</strong>
+  </div>
+  <table class="table table-bordered table-stripe avg-table" >
+            <tbody>
+            <tr >
+              <td rowspan="3" class="avg-star"><div class="icon-star a"></div></td>
+              <td></td>
+              <td>Jobs</td>
+              <td>Input</td>
+              <td>Output</td>
+              <td>Duration</td>
+              <td>Oldest</td>
+              <td>Most Recent</td>
+            </tr>
+            <tr class="avg-info">
+              <td>Avg</td>
+              <td>43</td>
+              <td>200</td>
+              <td>10 mb</td>
+              <td>00:00:58</td>
+              <td>2012-07-22</td>
+              <td>2012-07-24</td>
+            </tr>
+             <tr class="compare-info">
+
+              <td>Min / Max</td>
+              <td>3 / 128</td>
+              <td>10kb / 248mb</td>
+              <td>5kb / 18mb</td>
+              <td>00:00:10 / 00:01:20</td>
+              <td></td>
+              <td></td>
+             </tr>
+            </tbody>
+  </table>
     <div id="filter_info" class="row">
-      <div class="span3">Show: <a href="javascript:void(0)">Filtered (400)</a>&nbsp;&#124;&nbsp;<a href="javascript:void(0)">Starred (20)</a></div>
-      <div class="span2"><a href="javascript:void(0)">Clear filters</a>&nbsp;&#124;&nbsp;<a href="javascript:void(0)">Clear stars</a></div>
+      <div class="span3">Show: <a href="javascript:void(0)">Filtered ({{view.filtered}})</a>&nbsp;&#124;&nbsp;<a href="javascript:void(0)">Starred (20)</a></div>
+      <div class="span2"><a href="#" {{action "clearFilters" target="view"}}>Clear filters</a>&nbsp;&#124;&nbsp;<a href="javascript:void(0)">Clear stars</a></div>
     </div>
     <div>
     </div>
     <table class="table table-striped" id="dataTable">
     <thead>
     <tr>
-      <th>App ID<i class="icon-question-sign"></i></th>
-      <th>Name<i class="icon-question-sign"></i></th>
-      <th>Type<i class="icon-question-sign"></i></th>
-      <th>User<i class="icon-question-sign"></i></th>
-      <th>Jobs<i class="icon-question-sign"></i></th>
-      <th>Input<i class="icon-question-sign"></i></th>
-      <th>Output<i class="icon-question-sign"></i></th>
-      <th>Duration<i class="icon-question-sign"></i></th>
+      <th>App ID <i class="icon-question-sign"></i></th>
+      <th>Name <i class="icon-question-sign"></i></th>
+      <th>Type <i class="icon-question-sign"></i></th>
+      <th>User <i class="icon-question-sign"></i></th>
+      <th>Jobs <i class="icon-question-sign"></i></th>
+      <th>Input <i class="icon-question-sign"></i></th>
+      <th>Output <i class="icon-question-sign"></i></th>
+      <th>Duration <i class="icon-question-sign"></i></th>
       <th>Run Date</th>
     </tr>
     <tr>
           <th>{{view view.appidFilterView}}</th>
-          <th><input class="input-small" type="text" placeholder="Name"/></th>
+          <th>{{view view.nameFilterView}}</th>
           <th>{{view view.typeSelectView}}</th>
-          <th><input class="input-mini" type="text" placeholder="User"/></th>
-          <th><input class="input-mini" type="text" placeholder="Jobs"/></th>
-          <th><input class="input-mini" type="text" placeholder="Input"/></th>
-          <th><input class="input-mini" type="text" placeholder="Output"/></th>
-          <th><input class="input-mini" type="text" placeholder="Duration"/></th>
+          <th>{{view view.userFilterView}}</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>
         </tr>
     </thead>
     <tbody>
     {{#each run in view.content}}
-    <tr>
-      <td><i class="icon-star"></i>&nbsp;<a href="javascript:void(0)">ID&nbsp;{{run.appId}}</a></td>
-      <td>{{run.appName}}</td>
-      <td>{{run.type}}</td>
-      <td>{{run.userName}}</td>
-      <td>{{run.numJobsTotal}}</td>
-      <td>10MB</td>
-      <td>30MB</td>
-      <td>00:15:32</td>
-      <td>{{run.lastUpdateTime}}</td>
-    </tr>
+      {{view view.containerRow runBinding="run" currentViewBinding="view.appTableRow"}}
     {{/each}}
     </tbody>
     </table>

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps/list_row.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps/list_row.hbs?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps/list_row.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps/list_row.hbs Wed Nov  7 04:00:21 2012
@@ -0,0 +1,27 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<td><i class="icon-star"></i>&nbsp;<a href="javascript:void(0)">ID&nbsp;{{run.appId}}</a></td>
+<td>{{run.appName}}</td>
+<td>{{run.type}}</td>
+<td>{{run.userName}}</td>
+<td>{{run.numJobsTotal}}</td>
+<td>10MB</td>
+<td>30MB</td>
+<td>00:15:32</td>
+<td>{{run.lastUpdateTime}}</td>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs Wed Nov  7 04:00:21 2012
@@ -74,16 +74,18 @@
   {{view view.Chart}}
   <div class="chartLabel">{{t dashboard.services.hbase.chart.label}}</div>
   {{#if view.service.quickLinks.length}}
+  {{#view App.QuickViewLinks contentBinding="view.service"}}
   <div class="btn-group">
     <a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
       Quick Links
       <span class="caret"></span>
     </a>
     <ul class="dropdown-menu">
-      {{#each view.service.quickLinks}}
-      <li><a href="javascript:void(null)">{{label}}</a></li>
+      {{#each view.quickLinks}}
+      <li><a {{bindAttr href="url"}}>{{label}}</a></li>
       {{/each}}
     </ul>
   </div>
+  {{/view}}
   {{/if}}
 </div>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs Wed Nov  7 04:00:21 2012
@@ -85,16 +85,18 @@
   {{view view.Chart}}
   <div class="chartLabel">{{t dashboard.services.hdfs.chart.label}}</div>
   {{#if view.service.quickLinks.length}}
-  <div class="btn-group">
-    <a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
-      Quick Links
-      <span class="caret"></span>
-    </a>
-    <ul class="dropdown-menu">
-      {{#each view.service.quickLinks}}
-        <li><a href="javascript:void(null)">{{label}}</a></li>
-      {{/each}}
-    </ul>
-  </div>
+    {{#view App.QuickViewLinks contentBinding="view.service"}}
+      <div class="btn-group">
+        <a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
+          Quick Links
+          <span class="caret"></span>
+        </a>
+        <ul class="dropdown-menu">
+          {{#each view.quickLinks}}
+            <li><a {{bindAttr href="url"}}>{{label}}</a></li>
+          {{/each}}
+        </ul>
+      </div>
+    {{/view}}
   {{/if}}
 </div>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs Wed Nov  7 04:00:21 2012
@@ -85,16 +85,18 @@
   {{view view.Chart}}
   <div class="chartLabel">{{t dashboard.services.mapreduce.chart.label}}</div>
   {{#if view.service.quickLinks.length}}
+  {{#view App.QuickViewLinks contentBinding="view.service"}}
   <div class="btn-group">
     <a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
       Quick Links
       <span class="caret"></span>
     </a>
     <ul class="dropdown-menu">
-      {{#each view.service.quickLinks}}
-      <li><a href="javascript:void(null)">{{label}}</a></li>
+      {{#each view.quickLinks}}
+      <li><a {{bindAttr href="url"}}>{{label}}</a></li>
       {{/each}}
     </ul>
   </div>
+  {{/view}}
   {{/if}}
 </div>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs Wed Nov  7 04:00:21 2012
@@ -85,7 +85,6 @@
                 {{view Ember.Checkbox checkedBinding="view.allComponentsChecked"}} All
               </label>
             </li>
-
             <li>
               <label class="checkbox">
                 {{view Ember.Checkbox checkedBinding="view.masterComponentsChecked"}} Master Components:
@@ -94,7 +93,7 @@
                 {{#each component in masterComponents}}
                 <li>
                   <label class="checkbox">
-                    {{view view.ComponentCheckboxView contentBinding="component"}} {{unbound component.componentName}}
+                    {{view Ember.Checkbox checkedBinding="component.checkedForHostFilter" }} {{unbound component.componentName}}
                   </label>
                 </li>
                 {{/each}}
@@ -109,17 +108,22 @@
                 {{#each component in slaveComponents}}
                 <li>
                   <label class="checkbox">
-                    {{view view.ComponentCheckboxView contentBinding="component" }} {{unbound component.componentName}}
+                    {{view Ember.Checkbox checkedBinding="component.checkedForHostFilter" }} {{unbound component.componentName}}
                   </label>
                 </li>
                 {{/each}}
               </ul>
             </li>
 
+            <li class="align-right">
+              <button class="btn" {{action "closeFilters" target="view"}}>
+                Cancel
+              </button>
+              <button class="btn btn-primary" {{action "applyFilters" target="view"}}>
+                Apply
+              </button>
+            </li>
           </ul>
-          <button {{bindAttr disabled="view.isApplyDisabled"}} class="btn" {{action "applyFilters" target="view"}}>
-            Apply
-          </button>
         </div>
       </th>
     </tr>
@@ -134,7 +138,7 @@
         </label>
       </td>
       <td class="name">
-        <span class="health-status-{{unbound host.healthStatus}}"></span>
+        <span {{bindAttr class="host.healthClass"}}></span>
         <a href="#" {{action "showDetails" host}}>{{unbound host.hostName}}</a>
       </td>
       <td>{{host.cluster.clusterName}}</td>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs Wed Nov  7 04:00:21 2012
@@ -16,9 +16,9 @@
 * limitations under the License.
 -->
 <div id="host-details">
-  <i class="icon-home"></i> /
+  <a href='#' {{action "routeHome" target="controller"}}><i class="icon-home"></i></a> /
   <a href="javascript:void(null)" data-toggle="modal" {{action backToHostsList}}>Hosts</a> /
-  <span class="host-title health-status-{{unbound view.content.healthStatus}}">{{unbound view.content.hostName}}</span>
+  <span {{bindAttr class=":host-title view.content.healthClass"}}>{{unbound view.content.hostName}}</span>
   <div class="host-maintenance">
     <div class="btn-group display-inline-block">
       <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs Wed Nov  7 04:00:21 2012
@@ -32,7 +32,8 @@
     {{#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="view.buttonClass"}} data-toggle="dropdown">
+        <button {{bindAttr id="view.buttonId"}} class="component-operation-button btn btn-success dropdown-toggle" data-toggle="dropdown">
+          <span {{bindAttr class="view.indicatorClass"}}></span>
           {{unbound view.content.componentName}}
           <span class="caret"></span>
         </button>
@@ -49,12 +50,12 @@
               </a>
             </li>
           {{/if}}
-            <li {{bindAttr class="view.content.workStatus::hidden"}}>
+            <li {{bindAttr class="view.componentCheckStatus::hidden"}}>
               <a href="javascript:void(null)" data-toggle="modal" {{action "stopComponent" view.content target="controller"}}>
                 Stop
               </a>
             </li>
-            <li {{bindAttr class="view.content.workStatus:hidden:"}}>
+            <li {{bindAttr class="view.componentCheckStatus:hidden:"}}>
               <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}>
                 Start
               </a>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service.hbs?rev=1406442&r1=1406441&r2=1406442&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service.hbs Wed Nov  7 04:00:21 2012
@@ -20,7 +20,7 @@
   <div id="services-menu" class="well span2" style="padding: 8px 0">
     {{view App.MainServiceMenuView}}
     <div class="add-service-button">
-      <a class="btn" href="javascript:void(null)">
+      <a class="btn" {{action addService href="true"}}>
         <i class="icon-plus"></i>
         Add Service
       </a>

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/add.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/add.hbs?rev=1406442&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/add.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/add.hbs Wed Nov  7 04:00:21 2012
@@ -0,0 +1,47 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<div id="add-service">
+  <div class="container">
+    <div class="container-fluid">
+
+      <a class="btn back" {{action backToServices}}>← Back to Services</a>
+
+      <div class="row-fluid">
+        <div class="span3">
+          <!--Sidebar content-->
+          <div class="well">
+            <ul class="nav nav-pills nav-stacked">
+              <li class="nav-header">{{t services.add.header}}</li>
+              <li {{bindAttr class="isStep1:active view.isStep1Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep1 target="controller"}}>{{t installer.step4.header}}</a></li>
+              <li {{bindAttr class="isStep2:active view.isStep2Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep2 target="controller"}}>{{t installer.step5.header}}</a></li>
+              <li {{bindAttr class="isStep3:active view.isStep3Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep3 target="controller"}}>{{t installer.step6.header}}</a></li>
+              <li {{bindAttr class="isStep4:active view.isStep4Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep4 target="controller"}}>{{t installer.step7.header}}</a></li>
+              <li {{bindAttr class="isStep5:active view.isStep5Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep5 target="controller"}}>{{t installer.step8.header}}</a></li>
+              <li {{bindAttr class="isStep6:active view.isStep6Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep6 target="controller"}}>{{t installer.step9.header}}</a></li>
+              <li {{bindAttr class="isStep7:active view.isStep7Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep7 target="controller"}}>{{t installer.step10.header}}</a></li>
+            </ul>
+          </div>
+        </div>
+        <div id="add-service-content" class="well span9">
+          {{outlet}}
+        </div>
+      </div>
+    </div>
+  </div>
+</div>