Author: smarru
Date: Wed Jul 17 19:36:02 2013
New Revision: 1504246

URL: http://svn.apache.org/r1504246
Log:
thanks viknes for the contribution

Added:
    airavata/sandbox/gsoc2013/admin-dashboard/
    airavata/sandbox/gsoc2013/admin-dashboard/pom.xml
    airavata/sandbox/gsoc2013/admin-dashboard/src/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/web.xml
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/credentials.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/dashboard.css
    
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentDetail.html
    
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentErrorDetail.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experiments.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/index.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/dashboard.js
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/projects.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/search.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/users.html
    
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflowErrorDetail.html
    airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflows.html

Added: airavata/sandbox/gsoc2013/admin-dashboard/pom.xml
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/pom.xml?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/pom.xml (added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/pom.xml Wed Jul 17 19:36:02 2013
@@ -0,0 +1,94 @@
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.apache.airavata</groupId>
+  <artifactId>admin-dashboard</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>war</packaging>
+  <name>Admin Monitoring Dashboard</name>
+  <description>A WebApp for admins to monitor and debug workflows</description>
+  
+  <properties>
+       <war.plugin.version>2.1.1</war.plugin.version>
+       <cargo.version>1.3.1</cargo.version>
+  </properties>
+  <build>
+               <finalName>admin-dashboard</finalName>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       
<groupId>org.apache.maven.plugins</groupId>
+                                       
<artifactId>maven-compiler-plugin</artifactId>
+                                       <version>2.3.2</version>
+                                       <configuration>
+                                               <source>1.6</source>
+                                               <target>1.6</target>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-war-plugin</artifactId>
+                               <version>${war.plugin.version}</version>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.codehaus.cargo</groupId>
+                               <artifactId>cargo-maven2-plugin</artifactId>
+                               <version>${cargo.version}</version>
+                               <configuration>
+                                       <wait>true</wait>
+                                       <configuration>
+                                               <properties>
+                                                       
<cargo.servlet.port>6060</cargo.servlet.port>
+                                                       
<cargo.tomcat.ajp.port>6009</cargo.tomcat.ajp.port>
+                                                       
<cargo.protocol>http</cargo.protocol>
+                                                       <cargo.jvmargs>
+                                <![CDATA[-Xdebug 
-Xrunjdwp:transport=dt_socket,address=6000,server=y,suspend=n -noverify]]>
+                                                       </cargo.jvmargs>
+                                                       
<cargo.tomcat.context.reloadable>true</cargo.tomcat.context.reloadable>
+                                               </properties>
+                                               
<home>${project.build.directory}/tomcat7x</home>
+                                       </configuration>
+                                       <container>
+                                               
<containerId>tomcat7x</containerId>
+                                               <timeout>180000</timeout>
+                                               <zipUrlInstaller>
+                                                       <url>
+                                                               
http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.16/bin/apache-tomcat-7.0.16.zip
+                                                       </url>
+                                               </zipUrlInstaller>
+                                       </container>
+                                       <deployables>
+                                               <deployable>
+                                                       
<groupId>com.apache.airavata</groupId>
+                                                       
<artifactId>admin-dashboard</artifactId>
+                                                       <type>war</type>
+                                                       <properties>
+                                                               
<context>/admin</context>
+                                                       </properties>
+                                               </deployable>
+                                       </deployables>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+</project>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/web.xml?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/web.xml 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/WEB-INF/web.xml 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns="http://java.sun.com/xml/ns/javaee"; 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
+       version="3.0">
+       
+</web-app>
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/credentials.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/credentials.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/credentials.html 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/credentials.html 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,50 @@
+<!--
+  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>
+       <form class="form-horizontal" name="userForm">
+       <fieldset>
+               <legend>Login Details</legend>
+               <div class="control-group" ng-class="{error: 
userForm.username.$invalid}">
+                       <label class="control-label">Username</label>
+                       <div class="controls">
+                               <input type="text" ng-model="username" 
placeholder="Username" required>
+                       </div>
+               </div>
+               <div class="control-group">
+                       <label class="control-label">Password</label>
+                       <div class="controls">
+                               <input type="password" ng-model="password" 
placeholder="Password">
+                       </div>
+               </div>
+               <div class="control-group" ng-class="{error: 
userForm.url.$invalid}">
+                       <label class="control-label">Server</label>
+                       <div class="controls">
+                               <input type="url" ng-model="url" 
class="input-xlarge" placeholder="http://localhost:8080/airavata-registry/"; 
required>
+                       </div>
+               </div>
+               <div class="control-group">
+                       <div class="controls">
+                               <button ng-hide="crdSetFlag" ng-click="save()" 
ng-disabled="isClean() || userForm.$invalid" class="btn 
btn-primary">Login</button>
+                               <button ng-show="crdSetFlag" ng-disabled="true" 
class="btn btn-success"><i class="icon-ok"></i>  Successful</button>
+                               <a ng-click="clear()" class="btn">Clear</a>
+                       </div>
+               </div>
+       </fieldset>
+       </form>
+</div>
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/dashboard.css
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/dashboard.css?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/dashboard.css 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/css/dashboard.css 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,63 @@
+/**
+  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.
+*/
+.dashboard-overlay {
+       background-color: #ffffff;
+       margin: auto;
+       padding: 15px;
+       border: currentColor;
+       transition: 0.25s linear;
+       left: 3%;
+       top: 5%;
+       width: 91.7%;
+       height: 86%;
+       overflow: auto;
+       border-collapse: separate;
+       position: fixed !important;
+       z-index: 10000;
+       opacity: 0;
+       -webkit-border-radius: 1px;
+       -moz-border-radius: 1px;
+       border-radius: 1px;
+       -webkit-box-shadow: 0px 3px 10px rgba(34, 25, 25, 0.4);
+       -moz-box-shadow: 0px 3px 10px rgba(34, 25, 25, 0.4);
+       box-shadow: 0px 3px 10px rgba(34, 25, 25, 0.4);
+       outline: none;
+       -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+       -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+       box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+       -webkit-background-clip: padding-box;
+       -moz-background-clip: padding-box;
+       background-clip: padding-box;
+}
+
+.title {
+       padding: 1% 0% 1% 1%;
+       font-size: 18px;
+       font-weight: 550;
+       text-shadow: 0 1px 0 #ffffff;
+}
+
+.navbtn {
+       padding: 0.5% 0% 0% 0%;
+}
+
+a:hover,
+a:active {
+  cursor : pointer;
+}
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentDetail.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentDetail.html?rev=1504246&view=auto
==============================================================================
--- 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentDetail.html 
(added)
+++ 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentDetail.html 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,103 @@
+<!--
+  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>
+       <h4>Experiment Details</h4>
+       <div class="accordion" id="workflowAccordion">
+       <div class="accordion-group" ng-repeat="workflow in 
experiment.workflowInstanceDataList">
+       <div class="accordion-heading">
+               <a class="accordion-toggle" data-toggle="collapse" 
data-parent="#workflowAccordion" ng-href="#collapse{{$index+1}}">
+                       Workflow {{$index+1}} - 
{{workflow.workflowInstance.workflowExecutionId}}
+               </a>
+       </div>
+       <div id="collapse{{$index+1}}" class="accordion-body collapse">
+               <div class="accordion-inner">
+                               <table class="table table-condensed">
+                                       <thead>
+                                       <tr>
+                                               <th style="width:30%">Item</th>
+                                               <th style="width:70%">Value</th>
+                                       </tr>
+                                       </thead>
+                                       <tbody>
+                                       <tr>
+                                               <td>Workflow Id</td>
+                                               
<td>{{workflow.workflowInstance.workflowExecutionId}}</td>
+                                       </tr>
+                                       <tr>
+                                               <td>Workflow Instance Name</td>
+                                               
<td>{{workflow.workflowInstance.templateName}}</td>
+                                       </tr>
+                                       <tr>
+                                               <td>Workflow Status</td>
+                                               
<td>{{workflow.workflowInstanceStatus.executionStatus}} 
+                                                       <a 
ng-click="gotoUrl('/experiments/errors/'+experiment.experimentId+'/workflow/'+workflow.workflowInstance.workflowExecutionId)"
 ng-show="workflow.workflowInstanceStatus.executionStatus=='FAILED'">(Get error 
details)</a></td>
+                                       </tr>
+                                       <tr>
+                                               <td>Status Update Time</td>
+                                               
<td>{{workflow.workflowInstanceStatus.statusUpdateTime | date:'medium'}}</td>
+                                       </tr>
+                                       <tr ng-repeat="node in 
workflow.nodeDataList">
+                                               <td colspan="2">
+                                               
<div><strong>{{node.type}}</strong></div>
+                                               <div style="margin-left:2%">
+                                                       <table class="table 
table-condensed">
+                                                       <thead>
+                                                               <tr><th 
style="width:28%"></th><th style="width:72%"></th></tr>
+                                                       </thead>
+                                                       <tbody>
+                                                               <tr>
+                                                               <td>Node Id</td>
+                                                               
<td>{{node.nodeId}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Execution 
Status</td>
+                                                               
<td>{{node.status.executionStatus}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Status 
Update Time</td>
+                                                               
<td>{{node.status.statusUpdateTime | date:'medium'}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Input</td>
+                                                               
<td>{{node.input}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Input 
Data</td>
+                                                               
<td>{{node.inputData}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Output</td>
+                                                               
<td>{{node.output}}</td>
+                                                               </tr>
+                                                               <tr>
+                                                               <td>Output 
Data</td>
+                                                               
<td>{{node.outputData}}</td>
+                                                               </tr>
+                                                       </tbody>
+                                                       </table>
+                                                </div>
+                                               </td>
+                                       </tr>
+                                       </tbody>
+                               </table>        
+               </div>
+       </div>
+       </div>
+       </div>
+</div>
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentErrorDetail.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentErrorDetail.html?rev=1504246&view=auto
==============================================================================
--- 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentErrorDetail.html
 (added)
+++ 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experimentErrorDetail.html
 Wed Jul 17 19:36:02 2013
@@ -0,0 +1,102 @@
+<!--
+  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>
+       <h4>Experiment Error Details</h4>
+       <table class="table table-condensed">
+               <thead>
+               <tr>
+                       <th style="width:30%">Item</th>
+                       <th style="width:70%">Value</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr>
+                       <td>Workflow Id</td>
+                       
<td>{{workflow.workflowInstance.workflowExecutionId}}</td>
+               </tr>
+               <tr>
+                       <td>Workflow Status</td>
+                       
<td>{{workflow.workflowInstanceStatus.executionStatus}}</td>
+               </tr>
+               <tr>
+                       <td colspan="2">
+                       <div><strong>Workflow Level Error Details</strong></div>
+                       <div ng-hide="workflowErrors.length>0"><br>No workflow 
level error details available !</div>
+                       </td>
+               </tr>
+               <tr ng-repeat="workflowError in workflowErrors">
+                       <td colspan="2">
+                       <div>
+                       <table class="table table-condensed">
+                               <thead>
+                                       <tr><th style="width:30%"></th><th 
style="width:70%"></th></tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                       <td>Date</td>
+                                       <td 
style="color:red;">{{workflowError.errorTime | date:'medium'}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Message</td>
+                                       <td 
style="color:red;">{{workflowError.errorMessage}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Description</td>
+                                       <td 
style="color:red;">{{workflowError.errorDescription}}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+                       </div>
+                       </td>
+               </tr>
+               <tr>
+                       <td colspan="2">
+                       <div><strong>Node Level Error Details</strong></div>
+                       <div ng-hide="nodeErrors.length>0"><br>No node level 
error details available !</div>
+                       </td>
+               </tr>
+               <tr ng-repeat="nodeError in nodeErrors">
+                       <td colspan="2">
+                       <div><strong>{{nodeError.type}}</strong></div>
+                       <div style="margin-left:2%">
+                       <table class="table table-condensed">
+                               <thead>
+                                       <tr><th style="width:28%"></th><th 
style="width:72%"></th></tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                       <td>Date</td>
+                                       <td 
style="color:red;">{{nodeError.errorTime | date:'medium'}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Message</td>
+                                       <td 
style="color:red;">{{nodeError.errorMessage}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Description</td>
+                                       <td 
style="color:red;">{{nodeError.errorDescription}}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+                       </div>
+                       </td>
+               </tr>
+               </tbody>
+       </table>
+</div>
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experiments.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experiments.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experiments.html 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/experiments.html 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,37 @@
+<!--
+  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>
+       <h4>Experiments</h4>
+       <table class="table table-striped table-condensed">
+               <thead>
+               <tr>
+                       <th>Experiment Id</th>
+                       <th>Template</th>
+                       <th>Run By</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr ng-repeat="experiment in experiments">
+                       <td><a 
ng-click="gotoUrl('/experiments/id/'+experiment.experimentId)">{{experiment.experimentId}}</a></td>
+                       <td>{{experiment.workflowInstanceName}}</td>
+                       <td>{{experiment.user}}</td>
+               </tr>
+               </tbody>
+       </table>
+</div>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/index.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/index.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/index.html (added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/index.html Wed 
Jul 17 19:36:02 2013
@@ -0,0 +1,43 @@
+<!--
+  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.
+-->
+<!DOCTYPE html>
+<html ng-app="adminMonitorApp">
+<head>
+       <meta charset="UTF-8">
+       <meta name="viewport" content="width=device-width, initial-scale=1.0">
+               
+       <title>Airavata Admin Monitoring Dashboard</title>
+       
+       <script type="text/javascript" 
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+       <script type="text/javascript" 
src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
+       <script type="text/javascript" src="js/dashboard.js"></script>
+       
+               
+       <!-- Bootstrap -->
+       <script 
src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
+       <link 
href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css"
 rel="stylesheet">
+       <link href="css/dashboard.css" rel="stylesheet">
+
+</head>
+<body>
+
+       <adminboard></adminboard>
+
+</body>
+</html>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/dashboard.js
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/dashboard.js?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/dashboard.js 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/js/dashboard.js 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,481 @@
+/**
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+var app = angular.module("adminMonitorApp",["controllers"]);
+
+app.config(['$httpProvider','$routeProvider' ,function($httpProvider, 
$routeProvider) {
+       $httpProvider.defaults.useXDomain = true;
+    delete $httpProvider.defaults.headers.common['X-Requested-With'];
+       $routeProvider.
+       when('/', {controller:'LoginCtrl', templateUrl:'credentials.html'}).
+       when('/experiments/id/:expId', {controller:'ExperimentCtrl', 
templateUrl:'experimentDetail.html'}).
+       when('/experiments/errors/:expId', {controller:'ExperimentCtrl', 
templateUrl:'experimentErrorDetail.html'}).
+       when('/experiments/errors/:expId/workflow/:workflowId', 
{controller:'WorkflowCtrl', templateUrl:'workflowErrorDetail.html'}).
+       when('/experiments/user/:username', {controller:'ExperimentCtrl', 
templateUrl:'experiments.html'}).
+       when('/experiments/all', {controller:'ExperimentCtrl', 
templateUrl:'experiments.html'}).
+       when('/experiments', {controller:'ExperimentCtrl', 
templateUrl:'users.html'}).
+       when('/projects', {controller:'ProjectCtrl', 
templateUrl:'projects.html'}).
+       when('/workflows', {controller:'WorkflowCtrl', 
templateUrl:'workflows.html'}).
+       otherwise({redirectTo:'/'});
+}]);
+
+app.directive("adminboard", function() {
+       return {
+               restrict : "E",
+               transclude : true,
+               scope : {},
+               controller : function($scope,$element,$location) {
+                       $scope.backUrls = [];
+                       $scope.fwdUrls = [];
+                       $scope.goBack = function() {
+                               $scope.fwdUrls.push($location.path());
+                               $location.path($scope.backUrls.pop());
+                       };
+                       $scope.goFwd = function() {
+                               $scope.backUrls.push($location.path());
+                               $location.path($scope.fwdUrls.pop());
+                       };
+                       $scope.gotoUrl = function(url) {
+                               $scope.backUrls.push($location.path());
+                               $location.path(url);
+                       };
+                       $scope.showSearch = function() {
+                               $scope.showSearchPane = true;
+                       };
+                       $scope.hideSearch = function() {
+                               $scope.showSearchPane = false;
+                       };
+                       $scope.search = function 
(searchFor,searchBy,searchText){
+                               var searchUrl = "";
+                               if(searchFor==undefined || searchFor=="" || 
searchBy==undefined || searchBy=="" || searchText==undefined || searchText=="")
+                                       return;
+                               switch(searchFor) {
+                               case "Experiment" :
+                                       searchUrl += "/experiments";
+                                       break;
+                               case "Project" :
+                                       searchUrl += "/projects";
+                                       break;
+                               case "Workflow" :
+                                       searchUrl += "/workflows";
+                                       break;
+                               }
+                               switch(searchBy) {
+                               case "User" :
+                                       searchUrl += "/user";
+                                       break;
+                               case "Id" :
+                                       searchUrl += "/id";
+                                       break;
+                               }
+                               searchUrl += "/"+searchText;
+                               $scope.gotoUrl(searchUrl);
+                       };
+               },
+               template : 
+                       '<div>' +
+                               '<button class="btn" href="#dashboard" 
role="button" data-toggle="modal">Debug</button>' +
+                               '<div id="dashboard" class="dashboard-overlay 
hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" 
aria-hidden="true">' +
+                                       '<button type="button" class="close" 
data-dismiss="modal" aria-hidden="true">&times;</button>' +
+                                       '<div class="row">' +
+                                       '<div class="span2 title">Airavata 
Dashboard </div>' +
+                                       '<div class="span2 navbtn">' +
+                                       '<button class="btn" 
ng-click="goBack()" ng-disabled="backUrls.length<1"><i 
class="icon-arrow-left"></i></button> ' +
+                                       '<button class="btn" ng-click="goFwd()" 
ng-disabled="fwdUrls.length<1"><i class="icon-arrow-right"></i></button>' +
+                                       '</div>' +
+                                       '</div>' +
+                                       '<ul class="nav nav-tabs">' +
+                                       '<li><a 
ng-click="gotoUrl(\'/\')">Credentials</a></li>' +
+                                       '<li><a 
ng-click="gotoUrl(\'/experiments\')">Experiments</a></li>' +
+                                       '<li><a 
ng-click="gotoUrl(\'/projects\')">Projects</a></li>' +
+                                       '<li><a 
ng-click="gotoUrl(\'/workflows\')">Workflows</a></li>' +
+                                       '<li class="pull-right"><a 
ng-click="showSearch()">Search</a></li>' +
+                                       '</ul>' +
+                                       '<div class="row-fluid">' +
+                                       '<div ng-class="{span10:showSearchPane, 
span12:!showSearchPane}"><div ng-view></div></div>' +
+                                       '<div ng-include src="\'search.html\'" 
ng-show="showSearchPane" class="span2 well">' +
+                                       '</div>' +
+                                       '<div class="tab-content" 
ng-transclude></div>' +
+                               '</div>' +
+                       '</div>',
+               replace : true
+       };
+});
+
+
+// Controllers
+angular.module("controllers",["config","services"]).
+       controller("LoginCtrl", 
["$scope","User","Server",function($scope,User,Server) {
+               $scope.save = function() {
+                       Server.setEndpoint($scope.url);
+                       
User.login($scope.username,$scope.password).then(function(success) {
+                               if(success) {
+                                       $scope.crdSetFlag = true;
+                               }
+                       });
+               };
+               $scope.clear = function() {
+                       $scope.username = "";
+                       $scope.password = "";
+                       $scope.url = "";
+                       User.clearCredentials();
+                       Server.clearEndpoint();
+                       $scope.crdSetFlag = false;
+               };
+       }]).
+       controller("ExperimentCtrl", 
["$scope","$location","$routeParams","Experiment","Workflow","User",function($scope,$location,$routeParams,Experiment,Workflow,User)
 {
+               if($location.path()=="/experiments") {
+                       User.getAll().then(function(users) {
+                               console.log(users);
+                               $scope.users = users;
+                       });
+               }
+               else if($location.path()=="/experiments/all") {
+                       Experiment.getAll().then(function(experiments) {
+                               $scope.experiments = experiments;
+                       });
+               }
+               else if($location.path().indexOf("/experiments/user/")==0) {
+                       var username = $routeParams.username;
+                       
Experiment.getByUser(username).then(function(experiments) {
+                               $scope.experiments = experiments;
+                       });
+               }
+               else if($location.path().indexOf("/experiments/id/")==0) {
+                       var expId = $routeParams.expId;
+                       Experiment.getById(expId).then(function(experiment) {
+                               $scope.experiment = experiment;
+                       });
+               }
+               else if($location.path().indexOf("/experiments/errors/")==0) {
+                       var expId = $routeParams.expId;
+                       Experiment.getById(expId).then(function(experiment) {
+                               $scope.experiment = experiment;
+                               var expId = experiment.experimentId;
+                               var workflowId = 
experiment.workflowInstanceDataList[0].workflowInstance.workflowExecutionId;
+                               $scope.workflowErrors = [];
+                               Workflow.getWorkflowExecutionErrors(expId, 
workflowId).then(function(workflowErrors) {
+                                       for(item in workflowErrors) {
+                                               var error = 
workflowErrors[item];
+                                               if(error!={}) { 
+                                                       
$scope.workflowErrors.push(error);
+                                               }
+                                       }
+                               });
+                               var nodesList = 
experiment.workflowInstanceDataList[0].nodeDataList;
+                               $scope.nodeErrors = [];
+                               for(i in nodesList) {
+                                       Workflow.getNodeExecutionErrors(expId, 
workflowId,nodesList[i].nodeId).then(function(nodeErrors) {
+                                               for(item in nodeErrors) {
+                                                       var error = 
nodeErrors[item];
+                                                       if(error!={}) {
+                                                               error.type = 
nodesList[i].type;
+                                                               
$scope.nodeErrors.push(error);
+                                                       }
+                                               }
+                                       });
+                               }
+                       });
+               }
+       }]).
+       controller("ProjectCtrl", ["$scope","Project",function($scope,Project) {
+               Project.getAll().then(function(projects) {
+                       $scope.projects = projects;
+               });
+       }]).
+       controller("WorkflowCtrl", 
["$scope","$location","$routeParams","Experiment","Workflow",function($scope,$location,$routeParams,Experiment,Workflow)
 {
+               if($location.path()=="/workflows") {
+                       Workflow.getAll().then(function(workflows) {
+                               $scope.workflows = workflows;
+                       });
+               }
+               else if($location.path().indexOf("/experiments/errors/")==0) {
+                       var expId = $routeParams.expId;
+                       var workflowId = $routeParams.workflowId;
+                       Experiment.getById(expId).then(function(experiment) {
+                               var expId = experiment.experimentId;
+                               var workflowList = 
experiment.workflowInstanceDataList;
+                               $scope.workflowErrors = [];
+                               $scope.nodeErrors = [];
+                               for(i in workflowList) {
+                                       // Get only the particular workflow 
error details.
+                                       
if(workflowId==workflowList[i].workflowInstance.workflowExecutionId) {
+                                               $scope.workflow = 
workflowList[i];
+                                               
Workflow.getWorkflowExecutionErrors(expId, 
workflowId).then(function(workflowErrors) {
+                                                       for(item in 
workflowErrors) {
+                                                               var error = 
workflowErrors[item];
+                                                               if(error!={}) { 
+                                                                       
$scope.workflowErrors.push(error);
+                                                               }
+                                                       }
+                                               });
+                                               var nodesList = 
workflowList[i].nodeDataList;
+                                               for(i in nodesList) {
+                                                       
Workflow.getNodeExecutionErrors(expId, 
workflowId,nodesList[i].nodeId).then(function(nodeErrors) {
+                                                               for(item in 
nodeErrors) {
+                                                                       var 
error = nodeErrors[item];
+                                                                       
if(error!={}) {
+                                                                               
error.type = nodesList[i].type;
+                                                                               
$scope.nodeErrors.push(error);
+                                                                       }
+                                                               }
+                                                       });
+                                               }
+                                       }
+                               }
+                       });
+               }
+       }]);
+
+// Services
+angular.module("services",["config"]).
+       factory("Project",["$http","User","Server", function($http, User, 
Server) {
+               return {
+                       getAll : function() {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/projectregistry/get/projects",
+                                       cache : true, withCredentials : true}).
+                               then(function(response) {
+                                       return response.data.workspaceProjects;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching projects !");
+                               });
+                       }
+               };
+       }]).
+       factory("Experiment",["$http","User","Server", function($http, User, 
Server) {
+               return {
+                       getAll : function() {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/experimentregistry/get/experiments/all",
+                                       cache : true, withCredentials : true}).
+                               then(function(response) {
+                                       console.log(response);
+                                       var results = response.data.experiments;
+                                       var experiments = [];
+                                       for (var item in results) {
+                                               var experiment = {};
+                                               experiment.experimentId = 
results[item].experimentId;
+                                               experiment.gatewayName = 
results[item].gateway.gatewayName;
+                                               experiment.projectName = 
results[item].project.projectName;
+                                               experiment.submittedDate = new 
Date(results[item].submittedDate).toLocaleString();
+                                               experiment.user = 
results[item].user.userName;
+                                               experiments.push(experiment);
+                                       }
+                                       return experiments;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching experiments !");
+                               });
+                       },
+                       getByUser : function(username) {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/provenanceregistry/get/experiment/user?username="+username,
+                                       cache : true, withCredentials : true}).
+                               then(function(response) {
+                                       console.log(response);
+                                       return response.data.experimentDataList;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching experiments !");
+                               });
+                       },
+                       getById : function(expId) {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/provenanceregistry/get/experiment?experimentId="+expId,
+                                       cache : false, withCredentials : true}).
+                               then(function(response) {
+                                       return response.data;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching experiment with id "+expId);
+                               });
+                       }
+               };
+       }]).
+       factory("Workflow",["$http","User","Server", function($http, User, 
Server) {
+               return {
+                       getAll : function() {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/userwfregistry/get/workflows",
+                                       cache : true, withCredentials : true}).
+                               then(function(response) {
+                                       return response.data.workflowList;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching workflows !");
+                               });
+                       },
+                       getWorkflowExecutionErrors : function(expId,workflowId) 
{
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/provenanceregistry/workflow/errors?experimentId="+expId+"&workflowInstanceId="+workflowId,
+                                       cache : false, withCredentials : true}).
+                               then(function(response) {
+                                       return 
response.data.workflowExecutionErrorList;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching execution errors for workflow with id "+workflowId);
+                               });
+                       },
+                       getNodeExecutionErrors : 
function(expId,workflowId,nodeId) {
+                               return $http({method:"GET", 
url:Server.getEndpoint()+"api/provenanceregistry/node/errors?experimentId="+expId+"&workflowInstanceId="+workflowId+"&nodeId="+nodeId,
+                                       cache : false, withCredentials : true}).
+                               then(function(response) {
+                                       return 
response.data.nodeExecutionErrorList;
+                               }, function(error) {
+                                       console.log("Error occured while 
fetching execution errors for workflow id "+workflowId+" with node id "+nodeId);
+                               });
+                       }
+               };
+       }]);
+
+// Utils
+angular.module("config",["encoder"]).
+factory("User",["$http","Base64","Server", function($http,Base64,Server) {
+       var _username = "";
+       return {
+               getAuthHeader : function(username,password) {
+                       var token = username + ':' + password;
+                       return "Basic " + Base64.encode(token);
+               },
+               clearCredentials : function() {
+                       _username = "";
+                       return;
+               },
+               getUsername : function() {
+                       return _username;
+               },
+               login : function(username,password) {
+                       _username = username;
+                       $http.defaults.headers.common.Authorization = 
this.getAuthHeader(username,password);
+                       return $http({method:"GET", 
url:Server.getEndpoint()+"api/congfigregistry/get/eventingservice/uri",
+                               cache : false}).
+                       then(function(response) {
+                               return true;
+                       }, function(error) {
+                               console.error("Error logging in with username 
"+_username+" and the password you provided");
+                               return false;
+                       });
+               },
+               getAll : function() {
+                       return $http({method:"GET", 
url:Server.getEndpoint()+"api/userregistry/get/user/all",
+                               cache : false, withCredentials : true}).
+                       then(function(response) {
+                               return response.data.userList;
+                       }, function(error) {
+                               console.log("Error occured while fetching list 
of users");
+                       });
+               }
+       };
+}]).
+factory("Server",[function() {
+       var _url = "";
+       function endsWith(str, suffix) {
+           return str.indexOf(suffix, str.length - suffix.length) !== -1;
+       }
+       return {
+               setEndpoint : function(url) {
+                       if(!endsWith(url,"/"))
+                               url += "/";
+                       _url = url;
+                       return;
+               },
+               clearEndpoint : function() {
+                       _url = "";
+                       return;
+               },
+               getEndpoint : function() {
+                       return _url;
+               }
+       };
+}]);
+
+angular.module("encoder",[]).
+       factory('Base64', function() {
+           var keyStr = 'ABCDEFGHIJKLMNOP' +
+               'QRSTUVWXYZabcdef' +
+               'ghijklmnopqrstuv' +
+               'wxyz0123456789+/' +
+               '=';
+           return {
+               encode: function (input) {
+                   var output = "";
+                   var chr1, chr2, chr3 = "";
+                   var enc1, enc2, enc3, enc4 = "";
+                   var i = 0;
+        
+                   do {
+                       chr1 = input.charCodeAt(i++);
+                       chr2 = input.charCodeAt(i++);
+                       chr3 = input.charCodeAt(i++);
+        
+                       enc1 = chr1 >> 2;
+                       enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+                       enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+                       enc4 = chr3 & 63;
+        
+                       if (isNaN(chr2)) {
+                           enc3 = enc4 = 64;
+                       } else if (isNaN(chr3)) {
+                           enc4 = 64;
+                       }
+        
+                       output = output +
+                           keyStr.charAt(enc1) +
+                           keyStr.charAt(enc2) +
+                           keyStr.charAt(enc3) +
+                           keyStr.charAt(enc4);
+                       chr1 = chr2 = chr3 = "";
+                       enc1 = enc2 = enc3 = enc4 = "";
+                   } while (i < input.length);
+        
+                   return output;
+               },
+        
+               decode: function (input) {
+                   var output = "";
+                   var chr1, chr2, chr3 = "";
+                   var enc1, enc2, enc3, enc4 = "";
+                   var i = 0;
+        
+                   // remove all characters that are not A-Z, a-z, 0-9, +, /, 
or =
+                   var base64test = /[^A-Za-z0-9\+\/\=]/g;
+                   if (base64test.exec(input)) {
+                       alert("There were invalid base64 characters in the 
input text.\n" +
+                           "Valid base64 characters are A-Z, a-z, 0-9, '+', 
'/',and '='\n" +
+                           "Expect errors in decoding.");
+                   }
+                   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+        
+                   do {
+                       enc1 = keyStr.indexOf(input.charAt(i++));
+                       enc2 = keyStr.indexOf(input.charAt(i++));
+                       enc3 = keyStr.indexOf(input.charAt(i++));
+                       enc4 = keyStr.indexOf(input.charAt(i++));
+        
+                       chr1 = (enc1 << 2) | (enc2 >> 4);
+                       chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+                       chr3 = ((enc3 & 3) << 6) | enc4;
+        
+                       output = output + String.fromCharCode(chr1);
+        
+                       if (enc3 != 64) {
+                           output = output + String.fromCharCode(chr2);
+                       }
+                       if (enc4 != 64) {
+                           output = output + String.fromCharCode(chr3);
+                       }
+        
+                       chr1 = chr2 = chr3 = "";
+                       enc1 = enc2 = enc3 = enc4 = "";
+        
+                   } while (i < input.length);
+        
+                   return output;
+               }
+           };
+       });

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/projects.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/projects.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/projects.html 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/projects.html Wed 
Jul 17 19:36:02 2013
@@ -0,0 +1,35 @@
+<!--
+  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>
+       <table class="table table-striped table-condensed">
+               <thead>
+               <tr>
+                       <th>Project Name</th>
+                       <th>Gateway</th>
+                       <th>Run By</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr ng-repeat="project in projects">
+                       <td>{{project.projectName}}</td>
+                       <td>{{project.gateway.gatewayName}}</td>
+                       <td>{{project.airavataUser.userName}}</td>
+               </tbody>
+       </table>
+</div>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/search.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/search.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/search.html 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/search.html Wed 
Jul 17 19:36:02 2013
@@ -0,0 +1,57 @@
+<!--
+  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>
+       <button ng-click="hideSearch()" class="close">&times;</button>
+       <form>
+       <fieldset>
+               <legend>Search</legend>
+               <div class="control-group">
+                       <label class="control-label">For</label>
+                       <div class="controls">
+                               <select class="span12" ng-model="searchFor">
+                                       <option>Experiment</option>
+                                       <option>Project</option>
+                                       <option>Workflow</option>
+                               </select>
+                       </div>
+               </div>
+               <div class="control-group">
+                       <label class="control-label">By</label>
+                       <div class="controls">
+                               <select class="span12" ng-model="searchBy">
+                                       <option>Id</option>
+                                       <option>User</option>
+                                       <option>Date</option>
+                               </select>
+                       </div>
+               </div>
+               <div class="control-group">
+                       <label class="control-label">{{searchBy}}</label>
+                       <div class="controls">
+                               <input class="span12" type="text" 
ng-model="searchText" placeholder="Value">
+                       </div>
+               </div>
+               <div class="control-group">
+                       <div class="controls">
+                               <button 
ng-click="search(searchFor,searchBy,searchText)" class="btn">Search</button>
+                       </div>
+               </div>
+       </fieldset>
+       </form>
+</div>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/users.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/users.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/users.html (added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/users.html Wed 
Jul 17 19:36:02 2013
@@ -0,0 +1,35 @@
+<!--
+  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>
+       <h4>Select a user to list his experiments</h4>
+       <table class="table table-striped table-condensed">
+               <thead>
+               <tr>
+                       <th>Username</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr ng-repeat="user in users">
+                       <td><a 
ng-click="gotoUrl('/experiments/user/'+user.userName)">{{user.userName}}</a></td>
+               </tr>
+               </tbody>
+       </table>
+       <br>
+       <a ng-click="gotoUrl('/experiments/all')">Click here</a> to list 
<strong>all experiments</strong>
+</div>
\ No newline at end of file

Added: 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflowErrorDetail.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflowErrorDetail.html?rev=1504246&view=auto
==============================================================================
--- 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflowErrorDetail.html
 (added)
+++ 
airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflowErrorDetail.html
 Wed Jul 17 19:36:02 2013
@@ -0,0 +1,102 @@
+<!--
+  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>
+       <h4>Workflow Error Details</h4>
+       <table class="table table-condensed">
+               <thead>
+               <tr>
+                       <th style="width:30%">Item</th>
+                       <th style="width:70%">Value</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr>
+                       <td>Workflow Id</td>
+                       
<td>{{workflow.workflowInstance.workflowExecutionId}}</td>
+               </tr>
+               <tr>
+                       <td>Workflow Status</td>
+                       
<td>{{workflow.workflowInstanceStatus.executionStatus}}</td>
+               </tr>
+               <tr>
+                       <td colspan="2">
+                       <div><strong>Workflow Level Error Details</strong></div>
+                       <div ng-hide="workflowErrors.length>0"><br>No workflow 
level error details available !</div>
+                       </td>
+               </tr>
+               <tr ng-repeat="workflowError in workflowErrors">
+                       <td colspan="2">
+                       <div>
+                       <table class="table table-condensed">
+                               <thead>
+                                       <tr><th style="width:30%"></th><th 
style="width:70%"></th></tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                       <td>Date</td>
+                                       <td 
style="color:red;">{{workflowError.errorTime | date:'medium'}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Message</td>
+                                       <td 
style="color:red;">{{workflowError.errorMessage}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Description</td>
+                                       <td 
style="color:red;">{{workflowError.errorDescription}}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+                       </div>
+                       </td>
+               </tr>
+               <tr>
+                       <td colspan="2">
+                       <div><strong>Node Level Error Details</strong></div>
+                       <div ng-hide="nodeErrors.length>0"><br>No node level 
error details available !</div>
+                       </td>
+               </tr>
+               <tr ng-repeat="nodeError in nodeErrors">
+                       <td colspan="2">
+                       <div><strong>{{nodeError.type}}</strong></div>
+                       <div style="margin-left:2%">
+                       <table class="table table-condensed">
+                               <thead>
+                                       <tr><th style="width:28%"></th><th 
style="width:72%"></th></tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                       <td>Date</td>
+                                       <td 
style="color:red;">{{nodeError.errorTime | date:'medium'}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Message</td>
+                                       <td 
style="color:red;">{{nodeError.errorMessage}}</td>
+                                       </tr>
+                                       <tr>
+                                       <td>Description</td>
+                                       <td 
style="color:red;">{{nodeError.errorDescription}}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+                       </div>
+                       </td>
+               </tr>
+               </tbody>
+       </table>
+</div>
\ No newline at end of file

Added: airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflows.html
URL: 
http://svn.apache.org/viewvc/airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflows.html?rev=1504246&view=auto
==============================================================================
--- airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflows.html 
(added)
+++ airavata/sandbox/gsoc2013/admin-dashboard/src/main/webapp/workflows.html 
Wed Jul 17 19:36:02 2013
@@ -0,0 +1,33 @@
+<!--
+  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>
+       <table class="table table-striped table-condensed">
+               <thead>
+               <tr>
+                       <th>Workflow Name</th>
+                       <th>Graph</th>
+               </tr>
+               </thead>
+               <tbody>
+               <tr ng-repeat="workflow in workflows">
+                       <td>{{workflow.workflowName}}</td>
+                       <td>{{workflow.workflowGraph}}</td>
+               </tbody>
+       </table>
+</div>
\ No newline at end of file


Reply via email to