Repository: falcon Updated Branches: refs/heads/master d81820082 -> 86180d932
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/express-data/mockData.js ---------------------------------------------------------------------- diff --git a/falcon-ui/express-data/mockData.js b/falcon-ui/express-data/mockData.js index cdd783c..1c52358 100644 --- a/falcon-ui/express-data/mockData.js +++ b/falcon-ui/express-data/mockData.js @@ -16,34 +16,110 @@ * limitations under the License. */ (function () { - 'use strict'; - + 'use strict'; + function findByNameInList(type, name) { var i; for (i = 0; i < entitiesList[type].entity.length; i++) { - if (entitiesList[type].entity[i]["name"] === name) { - return i; + if (entitiesList[type].entity[i]["name"] === name) { + return i; + } + } + }; + + function findByStartEnd(type, start, end) { + for (var i = 0; i < instancesList[type].length; i++) { + if (instancesList[type][i].startTime === start && instancesList[type][i].endTime === end) { + return i; } - } - } + } + }; var entitiesList = { cluster : { "entity":[ - {"type":"cluster","name":"completeCluster","status":"SUBMITTED","list":{"tag":["uruguay=mvd","argentina=bsas","mexico=mex", "usa=was"]}}, + {"type":"cluster","name":"completeCluster","status":"SUBMITTED","tags":{"tag":["uruguay=mvd","argentina=bsas","mexico=mex", "usa=was"]}}, {"type":"cluster","name":"primaryCluster","status":"SUBMITTED"} ] }, feed: { "entity":[ - {"type":"FEED","name":"feedOne","status":"SUBMITTED","list":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, - {"type":"FEED","name":"feedTwo","status":"RUNNING","list":{"tag":["owner=USMarketing","classification=Secure","externalSource=USProdEmailServers","externalTarget=BITools"]}} + {"type":"FEED","name":"feedOne","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}, "clusters": {"cluster":"primaryCluster"}}, + {"type":"FEED","name":"feedTwo","status":"RUNNING","tags":{"tag":["owner=USMarketing","classification=Secure","externalSource=USProdEmailServers","externalTarget=BITools"]}, "clusters": {"cluster":["SampleCluster1","primaryCluster"]}}, + {"type":"FEED","name":"feedTree","status":"SUBMITTED","tags":{"tag":"externalSystem=USWestEmailServers"}}, + {"type":"FEED","name":"feedFour","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedFive","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedSix","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedSeven","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedEight","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedNine","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feedTen","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed11","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed12","status":"RUNNING","tags":{"tag":["owner=USMarketing","classification=Secure"]}}, + {"type":"FEED","name":"feed13","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed14","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed15","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed16","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed17","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed18","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed19","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed20","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed21","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed22","status":"RUNNING","tags":{"tag":["owner=USMarketing"]}}, + {"type":"FEED","name":"feed23","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed24","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed25","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed26","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed27","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed28","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed29","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed30","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed31","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed32","status":"RUNNING","tags":{"tag":["owner=USMarketing"]}}, + {"type":"FEED","name":"feed33","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed34","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed35","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed36","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed37","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed38","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed39","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed40","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed41","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed42","status":"RUNNING","tags":{"tag":["owner=USMarketing"]}}, + {"type":"FEED","name":"feed43","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed44","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed45","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed46","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed47","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed48","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed49","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed50","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed51","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed52","status":"RUNNING","tags":{"tag":["owner=USMarketing"]}}, + {"type":"FEED","name":"feed53","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed54","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed55","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed56","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed57","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed58","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed59","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed60","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed61","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}}, + {"type":"FEED","name":"feed62","status":"RUNNING","tags":{"tag":["owner=USMarketing"]}}, + {"type":"FEED","name":"feed63","status":"SUBMITTED","tags":{"tag":["externalSystem=USWestEmailServers","classification=secure"]}} ] }, process:{"entity":[ - {"type":"process","name":"processOne","status":"SUBMITTED","list":{"tag":["pipeline=churnAnalysisDataPipeline","owner=ETLGroup","montevideo=mvd"]}}, - {"type":"process","name":"processTwo","status":"SUBMITTED","list":{"tag":["pipeline=churnAnalysisDataPipeline","owner=ETLGroup","externalSystem=USWestEmailServers"]}}]} - }, + {"type":"process","name":"processOne","status":"SUBMITTED","tags":{"tag":["pipeline=churnAnalysisDataPipeline","owner=ETLGroup","montevideo=mvd"]}}, + {"type":"process","name":"processTwo","status":"SUBMITTED","tags":{"tag":["pipeline=churnAnalysisDataPipeline","owner=ETLGroup","externalSystem=USWestEmailServers"]}}, + {"type":"process","name":"hdfs-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HDFS"]}}, + {"type":"process","name":"hdfs-azure-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HDFS","runsOn=target"]}}, + {"type":"process","name":"hdfs-s3-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HDFS","runsOn=target"]}}, + {"type":"process","name":"hive-databases-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HIVE","runsOn=target"]}}, + {"type":"process","name":"hive-db-tables-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HIVE","runsOn=source"]}}, + {"type":"process","name":"mirror4","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HDFS","runsOn=source"]}} + ]} + }, definitions = { CLUSTER: { completeCluster : '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + @@ -65,7 +141,7 @@ '<ACL owner="ambari-qa" group="users" permission="0755"/>' + '<properties>' + '<property name="this" value="property"/>' + - '</properties>' + + '</properties>' + '</cluster>', primaryCluster: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + '<cluster name="primaryCluster" description="oregonHadoopCluster" colo="USWestOregon" xmlns="uri:falcon:cluster:0.1">' + @@ -88,7 +164,7 @@ '<feed name="feedOne" description="Raw customer email feed" xmlns="uri:falcon:feed:0.1">' + '<tags>externalSystem=USWestEmailServers,classification=secure</tags>' + '<frequency>hours(1)</frequency>' + - '<timezone>UTC</timezone>' + + '<timezone>GMT+00:00</timezone>' + '<late-arrival cut-off="hours(4)"/>' + '<clusters>' + '<cluster name="primaryCluster" type="source">' + @@ -122,7 +198,7 @@ '<tags>owner=USMarketing,classification=Secure,externalSource=USProdEmailServers,externalTarget=BITools</tags>' + '<groups>churnAnalysisDataPipeline</groups>' + '<frequency>hours(1)</frequency>' + - '<timezone>UTC</timezone>' + + '<timezone>GMT+00:00</timezone>' + '<clusters>' + '<cluster name="primaryCluster" type="source">' + '<validity start="2014-02-28T00:00Z" end="2016-04-01T00:00Z"/>' + @@ -187,18 +263,352 @@ '<parallel>1</parallel>' + '<order>FIFO</order>' + '<frequency>hours(1)</frequency>' + - '<timezone>UTC</timezone>' + + '<timezone>GMT+00:00</timezone>' + '<outputs>' + '<output name="output" feed="rawEmailFeed" instance="now(0,0)"/>' + '</outputs>' + '<workflow name="emailIngestWorkflow" version="2.0.0" engine="oozie" path="/user/ambari-qa/falcon/demo/apps/ingest/fs"/>' + '<retry policy="periodic" delay="minutes(15)" attempts="3"/>' + - '</process>' + '</process>', + + 'hdfs-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hdfs-mirror-test'><tags>_falcon_mirroring_type=HDFS</tags><clusters><cluster name='completeCluster'><validity start='2015-03-28T07:32:00.000Z' end='2015-12-31T20:00:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>days(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='50'></property><property name='distcpMapBandwidth' value='1100'></property><property name='drSourceDir' value='first-path/source/cluster'></property><property name='drTargetDir' value='second-path/source/cluster'></property><property name='drTargetClusterFS' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drSourceClusterFS' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drNotifyEma il' value='[email protected]'></property><property name='targetCluster' value='primaryCluster'></property><property name='sourceCluster' value='completeCluster'></property></properties><workflow name='hdfs-mirror-test2-WF' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hdfs-replication/resources/runtime/hdfs-replication-workflow.xml' lib=''/><retry policy='EXPONENTIAL_BACKOFF' delay='days(60)' attempts='7'/><ACL owner='ambari-qa' group='users2' permission='0x755'/></process>", + + 'hdfs-azure-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hdfs-azure-mirror-test'><tags>_falcon_mirroring_type=HDFS,runsOn=target</tags><clusters><cluster name='completeCluster'><validity start='2015-03-28T06:32:00.000Z' end='2015-12-31T21:00:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>hours(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='340'></property><property name='distcpMapBandwidth' value='2200'></property><property name='drSourceDir' value='first-path/azure/something'></property><property name='drTargetDir' value='second-path/target/cluster'></property><property name='drTargetClusterFS' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drSourceClusterFS' value='http://some.addres.blob.core.windows.net'></pr operty><property name='drNotifyEmail' value='[email protected],[email protected]'></property><property name='targetCluster' value='completeCluster'></property><property name='sourceCluster' value=''></property></properties><workflow name='hdfs-azure-mirror-test-WF' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hdfs-replication/resources/runtime/hdfs-replication-workflow.xml' lib=''/><retry policy='EXPONENTIAL_BACKOFF' delay='days(60)' attempts='1'/><ACL owner='ambari-qa' group='users2' permission='0x755'/></process>", + + 'hdfs-s3-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hdfs-s3-mirror-test'><tags>_falcon_mirroring_type=HDFS,runsOn=target</tags><clusters><cluster name='completeCluster'><validity start='2015-04-03T00:42:00.000Z' end='2015-12-08T21:00:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>months(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='3340'></property><property name='distcpMapBandwidth' value='5500'></property><property name='drSourceDir' value='first-path/s3/something'></property><property name='drTargetDir' value='third-path/target/cluster'></property><property name='drTargetClusterFS' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drSourceClusterFS' value='s3://some.address..amazonaws.com'></property><property name='drNotifyEmail' value='[email protected]'></property><property name='targetCluster' value='completeCluster'></property><property name='sourceCluster' value=''></property></properties><workflow name='hdfs-s3-mirror-test-WF' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hdfs-replication/resources/runtime/hdfs-replication-workflow.xml' lib=''/><retry policy='FINAL' delay='months(60)' attempts='15'/><ACL owner='ambari-qa' group='users' permission='0x755'/></process>", + + 'hive-databases-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hive-databases-mirror-test'><tags>_falcon_mirroring_type=HIVE,runsOn=target</tags><clusters><cluster name='completeCluster'><validity start='2015-04-14T15:42:00.000Z' end='2016-01-22T14:04:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>months(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='111'></property><property name='distcpMapBandwidth' value='678'></property><property name='targetCluster' value='primaryCluster'></property><property name='sourceCluster' value='completeCluster'></property><property name='targetHiveServer2Uri' value='some/path/staging'></property><property name='sourceHiveServer2Uri' value='thrift://localhost:10000'></property><property name='sourceStagingPat h' value='/apps/falcon/backupCluster/staging'></property><property name='targetStagingPath' value='*'></property><property name='targetNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceServicePrincipal' value='hive'></property><property name='targetServicePrincipal' value='hive'></property><property name='targetMetastoreUri' value=''></property><property name='sourceMetastoreUri' value='thrift://localhost:9083'></property><property name='sourceTable' value='*'></property><property name='sourceDatabase' value='db1,db2,db3'></property><property name='maxEvents' value='-10'></property><property name='replicationMaxMaps' value='52'></property><property name='clusterForJobRun' value='primaryCluster'></property><property name='clusterForJobRunWriteEP' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drJobName' value='hive-databases-mirror-test'></property>< property name='drNotifyEmail' value='[email protected]'></property></properties><workflow name='falcon-dr-hive-workflow' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hive-disaster-recovery/resources/runtime/hive-disaster-recovery-workflow.xml' lib=''/><retry policy='PERIODIC' delay='months(60)' attempts='15'/><ACL owner='ambari-qa' group='users' permission='0x755'/></process>", + + 'hive-db-tables-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hive-db-tables-mirror-test'><tags>_falcon_mirroring_type=HIVE,runsOn=source</tags><clusters><cluster name='completeCluster'><validity start='2015-05-01T09:42:00.000Z' end='2016-04-09T09:04:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>months(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='111'></property><property name='distcpMapBandwidth' value='678'></property><property name='targetCluster' value='primaryCluster'></property><property name='sourceCluster' value='completeCluster'></property><property name='targetHiveServer2Uri' value='some/path/staging'></property><property name='sourceHiveServer2Uri' value='thrift://localhost:10000'></property><property name='sourceStagingPat h' value='/apps/falcon/backupCluster/staging'></property><property name='targetStagingPath' value='/apps/falcon/some/staging'></property><property name='targetNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceServicePrincipal' value='hive'></property><property name='targetServicePrincipal' value='hive'></property><property name='targetMetastoreUri' value=''></property><property name='sourceMetastoreUri' value='thrift://localhost:9083'></property><property name='sourceTable' value='table1,table2,table3'></property><property name='sourceDatabase' value='database1'></property><property name='maxEvents' value='-10'></property><property name='replicationMaxMaps' value='52'></property><property name='clusterForJobRun' value='completeCluster'></property><property name='clusterForJobRunWriteEP' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drJobName' value ='hive-db-tables-mirror-test'></property><property name='drNotifyEmail' value='[email protected]'></property></properties><workflow name='falcon-dr-hive-workflow' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hive-disaster-recovery/resources/runtime/hive-disaster-recovery-workflow.xml' lib=''/><retry policy='PERIODIC' delay='months(60)' attempts='15'/><ACL owner='ambari-qa' group='users' permission='0x755'/></process>" + + } + + }, + instancesList = { + FEED: [ + { + "details": "", + "endTime": "2014-10-21T14:40:26-07:00", + "startTime": "2015-10-21T14:39:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933395-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-01T07:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "RUNNING", + "instance": "2012-04-02T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUSPENDED", + "instance": "2012-04-03T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "KILLED", + "instance": "2012-04-04T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-05T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "WAITING", + "instance": "2012-04-06T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "FAILED", + "instance": "2012-04-07T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-08T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUSPENDED", + "instance": "2012-04-09T08:00Z" + },{ + "details": "", + "endTime": "2014-10-21T14:40:26-07:00", + "startTime": "2015-10-21T14:39:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933395-oozie-rgau-W", + "status": "SUSPENDED", + "instance": "2012-04-10T07:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "RUNNING", + "instance": "2012-04-11T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUSPENDED", + "instance": "2012-04-12T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "KILLED", + "instance": "2012-04-13T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-14T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-15T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-16T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-17T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-18T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-19T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-20T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-21T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-22T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-18T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-19T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-20T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-21T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-22T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-18T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-19T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-20T08:00Z" + }, { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-20T08:00Z" } - }; - + ], + PROCESS: [ + { + "details": "", + "endTime": "2014-10-21T14:40:26-07:00", + "startTime": "2015-10-21T14:39:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933395-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-03T07:00Z" + }, + { + "details": "", + "endTime": "2014-10-21T14:42:26-07:00", + "startTime": "2015-10-21T14:41:56-07:00", + "cluster": "primary-cluster", + "logFile": "http:\/\/localhost:11000\/oozie?job=0000070-131021115933397-oozie-rgau-W", + "status": "SUCCEEDED", + "instance": "2012-04-03T08:00Z" + } + ] + }, + entityDependencies = { + "entity": [ + { + "name": "SampleInput", + "type": "feed", + "tag": ["Input"] + //"list": {"tag": ["Input"]} + }, + { + "name": "SampleOutput", + "type": "feed", + "tag": ["Output"] + //"list": {"tag": ["Output"]} + }, + { + "name": "primary-cluster", + "type": "cluster" + } + ] + }, + vertices = { + "results":[{"timestamp":"2015-03-26T20:24Z","name":"SampleProcess3\/2014-11-01T23:00Z","type":"process-instance","version":"1.0","_id":40108,"_type":"vertex"}],"totalSize":1 + }, + verticesDirection = [ + {"results":[{"_id":"2wm3-aqU-4u","_type":"edge","_outV":40108,"_inV":16,"_label":"owned-by"},{"_id":"2wm1-aqU-5o","_type":"edge","_outV":40108,"_inV":4,"_label":"runs-on"},{"_id":"2wm7-apq-5w","_type":"edge","_outV":40016,"_inV":40108,"_label":"input"},{"_id":"2wm5-aqU-5E","_type":"edge","_outV":40108,"_inV":40012,"_label":"output"},{"_id":"2wlZ-aqU-86","_type":"edge","_outV":40108,"_inV":32,"_label":"instance-of"}],"totalSize":5}, + {"results":[{"timestamp":"2015-03-26T02:45Z","name":"ambari-qa","type":"user","_id":16,"_type":"vertex"},{"timestamp":"2015-03-26T02:42Z","name":"primaryCluster","type":"cluster-entity","_id":4,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed1\/yearno=2014\/monthno=11","type":"feed-instance","_id":40016,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed6\/yearno=2014\/monthno=11","type":"feed-instance","_id":40012,"_type":"vertex"},{"timestamp":"2015-03-26T02:46Z","name":"SampleProcess3","type":"process-entity","version":"1.0","_id":32,"_type":"vertex"}],"totalSize":5}, + {"results":[{"_id":"2w9d-apm-4u","_type":"edge","_outV":40012,"_inV":16,"_label":"owned-by"},{"_id":"2w9b-apm-4S","_type":"edge","_outV":40012,"_inV":4,"_label":"stored-in"},{"_id":"2whH-aqo-5E","_type":"edge","_outV":40076,"_inV":40012,"_label":"output"},{"_id":"2wif-aqs-5E","_type":"edge","_outV":40080,"_inV":40012,"_label":"output"},{"_id":"2w9f-api-5E","_type":"edge","_outV":40008,"_inV":40012,"_label":"output"},{"_id":"2wiN-aqw-5E","_type":"edge","_outV":40084,"_inV":40012,"_label":"output"},{"_id":"2wa1-apu-5E","_type":"edge","_outV":40020,"_inV":40012,"_label":"output"},{"_id":"2wjl-aqA-5E","_type":"edge","_outV":40088,"_inV":40012,"_label":"output"},{"_id":"2waz-apy-5E","_type":"edge","_outV":40024,"_inV":40012,"_label":"output"},{"_id":"2wjT-aqE-5E","_type":"edge","_outV":40092,"_inV":40012,"_label":"output"},{"_id":"2wb7-apC-5E","_type":"edge","_outV":40028,"_inV":40012,"_label":"output"},{"_id":"2wkr-aqI-5E","_type":"edge","_outV":40096,"_inV":40012,"_label":"output "},{"_id":"2wbF-apG-5E","_type":"edge","_outV":40032,"_inV":40012,"_label":"output"},{"_id":"2wkZ-aqM-5E","_type":"edge","_outV":40100,"_inV":40012,"_label":"output"},{"_id":"2wcd-apK-5E","_type":"edge","_outV":40036,"_inV":40012,"_label":"output"},{"_id":"2wlx-aqQ-5E","_type":"edge","_outV":40104,"_inV":40012,"_label":"output"},{"_id":"2wcL-apO-5E","_type":"edge","_outV":40040,"_inV":40012,"_label":"output"},{"_id":"2wm5-aqU-5E","_type":"edge","_outV":40108,"_inV":40012,"_label":"output"},{"_id":"2wdj-apS-5E","_type":"edge","_outV":40044,"_inV":40012,"_label":"output"},{"_id":"2wdR-apW-5E","_type":"edge","_outV":40048,"_inV":40012,"_label":"output"},{"_id":"2wep-aq0-5E","_type":"edge","_outV":40052,"_inV":40012,"_label":"output"},{"_id":"2weX-aq4-5E","_type":"edge","_outV":40056,"_inV":40012,"_label":"output"},{"_id":"2wfv-aq8-5E","_type":"edge","_outV":40060,"_inV":40012,"_label":"output"},{"_id":"2wg3-aqc-5E","_type":"edge","_outV":40064,"_inV":40012,"_label":"output"},{"_id":"2w gB-aqg-5E","_type":"edge","_outV":40068,"_inV":40012,"_label":"output"},{"_id":"2wh9-aqk-5E","_type":"edge","_outV":40072,"_inV":40012,"_label":"output"},{"_id":"2w99-apm-86","_type":"edge","_outV":40012,"_inV":28,"_label":"instance-of"}],"totalSize":27}, + {"results":[{"_id":"2w9t-apq-4u","_type":"edge","_outV":40016,"_inV":16,"_label":"owned-by"},{"_id":"2w9r-apq-4S","_type":"edge","_outV":40016,"_inV":4,"_label":"stored-in"},{"_id":"2wih-apq-5w","_type":"edge","_outV":40016,"_inV":40080,"_label":"input"},{"_id":"2wiP-apq-5w","_type":"edge","_outV":40016,"_inV":40084,"_label":"input"},{"_id":"2wa3-apq-5w","_type":"edge","_outV":40016,"_inV":40020,"_label":"input"},{"_id":"2wjn-apq-5w","_type":"edge","_outV":40016,"_inV":40088,"_label":"input"},{"_id":"2waB-apq-5w","_type":"edge","_outV":40016,"_inV":40024,"_label":"input"},{"_id":"2w9v-apq-5w","_type":"edge","_outV":40016,"_inV":40008,"_label":"input"},{"_id":"2wjV-apq-5w","_type":"edge","_outV":40016,"_inV":40092,"_label":"input"},{"_id":"2wb9-apq-5w","_type":"edge","_outV":40016,"_inV":40028,"_label":"input"},{"_id":"2wkt-apq-5w","_type":"edge","_outV":40016,"_inV":40096,"_label":"input"},{"_id":"2wbH-apq-5w","_type":"edge","_outV":40016,"_inV":40032,"_label":"input"},{"_id": "2wl1-apq-5w","_type":"edge","_outV":40016,"_inV":40100,"_label":"input"},{"_id":"2wcf-apq-5w","_type":"edge","_outV":40016,"_inV":40036,"_label":"input"},{"_id":"2wlz-apq-5w","_type":"edge","_outV":40016,"_inV":40104,"_label":"input"},{"_id":"2wcN-apq-5w","_type":"edge","_outV":40016,"_inV":40040,"_label":"input"},{"_id":"2wm7-apq-5w","_type":"edge","_outV":40016,"_inV":40108,"_label":"input"},{"_id":"2wdl-apq-5w","_type":"edge","_outV":40016,"_inV":40044,"_label":"input"},{"_id":"2wdT-apq-5w","_type":"edge","_outV":40016,"_inV":40048,"_label":"input"},{"_id":"2wer-apq-5w","_type":"edge","_outV":40016,"_inV":40052,"_label":"input"},{"_id":"2weZ-apq-5w","_type":"edge","_outV":40016,"_inV":40056,"_label":"input"},{"_id":"2wfx-apq-5w","_type":"edge","_outV":40016,"_inV":40060,"_label":"input"},{"_id":"2wg5-apq-5w","_type":"edge","_outV":40016,"_inV":40064,"_label":"input"},{"_id":"2wgD-apq-5w","_type":"edge","_outV":40016,"_inV":40068,"_label":"input"},{"_id":"2whb-apq-5w","_type":"ed ge","_outV":40016,"_inV":40072,"_label":"input"},{"_id":"2whJ-apq-5w","_type":"edge","_outV":40016,"_inV":40076,"_label":"input"},{"_id":"2w9p-apq-86","_type":"edge","_outV":40016,"_inV":12,"_label":"instance-of"}],"totalSize":27} + ], + verticesProps = { + "results": + { + "timestamp":"2014-04-25T22:20Z", + "name":"local", + "type":"cluster-entity" + }, + "totalSize":3 + }, + server = { + //"properties":[{key: "authentication", value: "kerberos"}] + "properties":[{key: "authentication", value: "simple"}] + }; + exports.findByNameInList = findByNameInList; + exports.findByStartEnd = findByStartEnd; exports.entitiesList = entitiesList; exports.definitions = definitions; - + exports.instancesList = instancesList; + exports.entityDependencies = entityDependencies; + exports.vertices = vertices; + exports.verticesDirection = verticesDirection; + exports.verticesProps = verticesProps; + exports.server = server; + })(); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/package.json ---------------------------------------------------------------------- diff --git a/falcon-ui/package.json b/falcon-ui/package.json index dda4855..bee5174 100644 --- a/falcon-ui/package.json +++ b/falcon-ui/package.json @@ -16,6 +16,7 @@ "file": "~0.2.2", "grunt": "~0.4.4", "grunt-cli": "~0.1.9", + "grunt-concurrent": "^1.0.0", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-copy": "~0.5.0", "grunt-contrib-concat": "^0.5.0", @@ -27,6 +28,7 @@ "grunt-datauri": "~0.4.0", "grunt-express-server": "~0.4.13", "grunt-karma": "^0.9.0", + "grunt-protractor-runner": "^1.1.4", "grunt-scp": "^0.1.7", "jasmine": "^2.0.1", "karma": "^0.12.23", http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/pom.xml ---------------------------------------------------------------------- diff --git a/falcon-ui/pom.xml b/falcon-ui/pom.xml index adb219b..6469b3d 100644 --- a/falcon-ui/pom.xml +++ b/falcon-ui/pom.xml @@ -76,7 +76,6 @@ <arguments>test</arguments> </configuration> </execution> - </executions> </plugin> @@ -89,7 +88,9 @@ <exclude>app/css/bootstrap/**</exclude> <exclude>app/test/lib/**</exclude> <exclude>app/css/fonts/**</exclude> - <exclude>app/config/loginData.js</exclude> + <exclude>app/css/styles/**</exclude> + <exclude>app/config/loginData.json</exclude> + <exclude>README.md</exclude> <exclude>dist/**</exclude> <exclude>node/**</exclude> <exclude>node_modules/**</exclude> @@ -98,7 +99,9 @@ <exclude>karma.conf.js</exclude> <exclude>bower.json</exclude> <exclude>app/css/main.css</exclude> + <exclude>app/css/img/**</exclude> <exclude>app/test/e2e/protractor.js</exclude> + <exclude>app/js/directives/ng-tags-input.js</exclude> </excludes> </configuration> </plugin> http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/server.js ---------------------------------------------------------------------- diff --git a/falcon-ui/server.js b/falcon-ui/server.js index 422bcf9..298e10a 100644 --- a/falcon-ui/server.js +++ b/falcon-ui/server.js @@ -21,6 +21,7 @@ var bodyParser = require('body-parser'), express = require('express'), mockData = require('./express-data/mockData.js'), + chartData = require('./express-data/chartData.js'), server = express(), PORT = 3000; @@ -37,18 +38,117 @@ } }); + function searchByName(name, list){ + var result = []; + var index = 0; + for(var i=0; i<list.length; i++){ + //if(list[i].name === name){ + if(list[i].name.indexOf(name) !== -1){ + result[index++] = list[i]; + } + } + return result; + } + + function searchTag(tag, list){ + var result = []; + var index = 0; + for(var j=0; j<list.length; j++){ + for(var k=0; k<list[j].tags.tag.length; k++){ + if(list[j].tags.tag[k].indexOf(tag) !== -1){ + result[index++] = list[j]; + break; + } + } + } + return result; + } + + function searchByTags(tags, list){ + var arrTags = tags.split(","); + var result = list; + for(var i=0; i<arrTags.length; i++){ + result = searchTag(arrTags[i], result); + } + return result; + } + + function searchInstancesByDate(type, date, list){ + var result = []; + var index = 0; + for(var i=0; i<list.length; i++){ + var actualDate = new Date(list[i][type]); + if(date <= actualDate){ + result[index++] = list[i]; + } + } + return result; + } + + function searchInstancesByStatus(status, list){ + var result = []; + var index = 0; + for(var i=0; i<list.length; i++){ + if(list[i].status === status){ + result[index++] = list[i]; + } + } + return result; + } + server.get('/api/entities/list/:type', function (req, res) { var type = req.params.type; - res.json(mockData.entitiesList[type]); + var name = req.query.nameseq === undefined ? "" : req.query.nameseq; + var tags = req.query.tagkeys === undefined ? "" : req.query.tagkeys; + var offset = parseInt(req.query.offset === undefined ? 0 : req.query.offset); + var numResults = parseInt(req.query.numResults === undefined ? 10 : req.query.numResults); + + var paginated = {}; + paginated.entity = []; + + //if(type === "all"){ + //if(type === "schedulable"){ + if(type === "feed,process"){ + paginated.entity = paginated.entity.concat(mockData.entitiesList.feed.entity, + mockData.entitiesList.process.entity); + }else{ + paginated.entity = paginated.entity.concat(mockData.entitiesList[type].entity); + } + + if(tags !== "" && name !== "" && name !== "*"){ + //console.log("Search by name " + name + " & tags " + tags); + paginated.entity = searchByName(name, paginated.entity); + paginated.entity = searchByTags(tags, paginated.entity); + paginated.totalResults = paginated.entity.length; + paginated.entity = paginated.entity.slice(offset, offset+numResults); + }else if(tags !== ""){ + //console.log("Search by tags " + tags); + paginated.entity = searchByTags(tags, paginated.entity); + paginated.totalResults = paginated.entity.length; + paginated.entity = paginated.entity.slice(offset, offset+numResults); + }else if(name !== ""){ + //console.log("Search by name " + name); + paginated.entity = searchByName(name, paginated.entity); + paginated.totalResults = paginated.entity.length; + paginated.entity = paginated.entity.slice(offset, offset+numResults); + }else{ + //console.log("Search all type:"+type); + paginated.totalResults = paginated.entity.length; + paginated.entity = paginated.entity.slice(offset, offset+numResults); + } + + res.json(paginated); }); + server.get('/api/entities/definition/:type/:name', function(req, res) { var type = req.params.type.toUpperCase(), name = req.params.name; if (mockData.definitions[type][name]) { + //console.log(mockData.definitions[type][name]); res.send(200, mockData.definitions[type][name]); } else { - res.send(404, "not found"); + res.send(404, '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><result><status>FAILED</status><message>(' + type + ') '+ name +' not found.</message><requestId>586fffcd-10c1-4975-8dda-4b34a712f2f4</requestId></result>'); } }); @@ -56,27 +156,34 @@ var type = req.params.type.toUpperCase(), text = req.text, name, + tags, indexInArray, responseSuccessMessage, responseFailedMessage, - initialIndex = text.indexOf("name") + 6, - finalIndex = getFinalIndexOfName(), + initialIndexName = text.indexOf("name") + 6, + finalIndexName = getFinalIndexOfName(), + initialIndexTags = text.indexOf("<tags>")+6, + finalIndexTags = text.indexOf("</tags>"), i; function getFinalIndexOfName () { - for (i = initialIndex; i < text.length; i++) { + for (i = initialIndexName; i < text.length; i++) { if (text[i] === '"' || text[i] === "'") { return i; } } } - name = text.slice(initialIndex, finalIndex); + name = text.slice(initialIndexName, finalIndexName); + tags = text.slice(initialIndexTags, finalIndexTags); + tags = tags.split(","); responseSuccessMessage = {"status": "SUCCEEDED", "message": "default/successful (" + type + ") " + name + "\n\n","requestId":"default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n"}; responseFailedMessage = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><result><status>FAILED</status><message>(' + type + ') '+ name +' already registered with configuration store. Can\'t be submitted again. Try removing before submitting.</message><requestId>586fffcd-10c1-4975-8dda-4b34a712f2f4</requestId></result>'; + if(name.length < 3) { res.send(404, responseFailedMessage); return; } + if (!mockData.definitions[type][name]) { mockData.definitions[type][name] = text; mockData.entitiesList[type.toLowerCase()].entity.push( - {"type": type, "name": name, "status": "SUBMITTED"} + {"type": type, "name": name, "status": "SUBMITTED", "tags":{"tag":tags}} ); res.send(200, responseSuccessMessage); } else { @@ -136,6 +243,282 @@ res.json(200, responseMessage); }); + function getInstanceList(req, res){ + var type = req.params.type.toUpperCase(), + name = req.params.name, + start = req.query.start === undefined ? "" : req.query.start, + end = req.query.end === undefined ? "" : req.query.end, + status = req.query.filterBy === undefined ? "" : req.query.filterBy.substring(7), + numResults = parseInt(req.query.numResults === undefined ? 5 : req.query.numResults), + offset = parseInt(req.query.offset === undefined ? 0 : req.query.offset), + responseMessage = { + "instances": [], + "requestId": "falcon/default/13015853-8e40-4923-9d32-6d01053c31c6\n\n", + "message": "default\/STATUS\n", + "status": "SUCCEEDED" + }; + + var instances = []; + instances = instances.concat(mockData.instancesList[type]); + + if(status !== ""){ + instances = searchInstancesByStatus(status, instances); + } + //if(start !== ""){ + // start = new Date(start); + // instances = searchInstancesByDate("startTime", start, instances); + //} + //if(end !== ""){ + // end = new Date(end); + // instances = searchInstancesByDate("endTime", end, instances); + //} + + responseMessage.instances = instances; + + var paginated = responseMessage; + paginated.instances = paginated.instances.slice(offset, offset+numResults); + return paginated; + } + + server.get('/api/instance/logs/:type/:name', function(req, res) { + res.json(getInstanceList(req, res)); + }); + + server.get('/api/instance/list/:type/:name', function(req, res) { + res.json(getInstanceList(req, res)); + }); + + server.post('/api/instance/suspend/:type/:name', function (req, res) { + var type = req.params.type.toUpperCase(), + name = req.params.name, + start = req.query.start, + end = req.query.end, + indexInArray = mockData.findByStartEnd(type, start, end), + responseMessage = { + "status": "SUCCEEDED", + "message": "default/" + name + "(" + type + ") start:" + start + " end: " + end + "suspended successfully\n", + "requestId": "default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n" + }; + mockData.instancesList[type].forEach(function (item) { + if (item.instance === start) { + item.status = "SUSPENDED"; + } + }); + //mockData.instancesList[type][indexInArray].status = "SUSPENDED"; + res.json(200, responseMessage); + }); + + server.post('/api/instance/resume/:type/:name', function (req, res) { + var type = req.params.type.toUpperCase(), + name = req.params.name, + start = req.query.start, + end = req.query.end, + indexInArray = mockData.findByStartEnd(type, start, end), + responseMessage = { + "status": "SUCCEEDED", + "message": "default/" + name + "(" + type + ") start:" + start + " end: " + end + "resumed successfully\n", + "requestId": "default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n" + }; + mockData.instancesList[type].forEach(function (item) { + if (item.instance === start) { + item.status = "RUNNING"; + } + }); + + //mockData.instancesList[type][indexInArray].status = "RUNNING"; + res.json(200, responseMessage); + }); + + server.post('/api/instance/rerun/:type/:name', function (req, res) { + var type = req.params.type.toUpperCase(), + name = req.params.name, + start = req.query.start, + end = req.query.end, + indexInArray = mockData.findByStartEnd(type, start, end), + responseMessage = { + "status": "SUCCEEDED", + "message": "default/" + name + "(" + type + ") start:" + start + " end: " + end + "resumed successfully\n", + "requestId": "default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n" + }; + + mockData.instancesList[type].forEach(function (item) { + if (item.instance === start) { + item.status = "RUNNING"; + } + });//Its badly done makes no sense + //mockData.instancesList[type][indexInArray].status = "RUNNING"; + res.json(200, responseMessage); + }); + + server.post('/api/instance/kill/:type/:name', function (req, res) { + var type = req.params.type.toUpperCase(), + name = req.params.name, + start = req.query.start, + end = req.query.end, + indexInArray = mockData.findByStartEnd(type, start, end), + responseMessage = { + "status": "SUCCEEDED", + "message": "default/" + name + "(" + type + ") start:" + start + " end: " + end + "killed successfully\n", + "requestId": "default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n" + }; + mockData.instancesList[type].forEach(function (item) { + if (item.instance === start) { + item.status = "KILLED"; + } + }); + //mockData.instancesList[type][indexInArray].status = "KILLED"; + res.json(200, responseMessage); + }); + + server.get('/api/entities/dependencies/:type/:name', function (req, res) { + var type = req.params.type.toUpperCase(), + name = req.params.name; + res.json(200, mockData.entityDependencies); + }); + + server.get('/api/metadata/lineage/vertices', function (req, res) { + res.json(200, mockData.vertices); + }); + + server.get('/api/metadata/lineage/vertices/:id/:direction', function (req, res) { + var id = req.params.id, + direction = req.params.direction, + response = ""; + if(id === "40108" && direction === "bothE"){ + response = mockData.verticesDirection[0]; + }else if(id === "40108" && direction === "both"){ + response = mockData.verticesDirection[1]; + }else if(id === "40012" && direction === "bothE"){ + response = mockData.verticesDirection[2]; + }else if(id === "40016" && direction === "bothE"){ + response = mockData.verticesDirection[3]; + } + res.json(200, response); + }); + + server.get('/api/metadata/lineage/properties/:id', function (req, res) { + var type = req.params.id; + res.json(200, mockData.verticesProps); + }); + + + /*server.post('/api/entities/prepareAndSubmitRecipe', function (req, res) { + var file = req.text, + responseMessage = { + "requestId": "default\/d72a41f7-6420-487b-8199-62d66e492e35\n", + "message": "default\/Submit successful (recipe)\n", + "status": "SUCCEEDED" + }; + console.log(file); + res.json(200, responseMessage); + });*/ + /* + * + * CHART + * + */ + + server.get('/api/instance/summary/:type/:mode', function(req, res) { + + var type = req.params.type, + mode = req.params.mode, + from = req.query.start, + fromDate = new Date(from.slice(0,4), (from.slice(5,7)-1), from.slice(8,10), 0, 0, 0), + response, + selectedArray; + + if (mode === 'hourly') { + response = {"summary": [],"requestId":"23c44f3f-f528-4a94-bc0e-f95019729b42","message":"date not found","status":"FAILED"} + chartData[type + 'Hours'].forEach(function (item) { + item.summary.forEach(function (date) { + var currentDate = new Date( + date.startTime.slice(0,4), + (date.startTime.slice(5,7) - 1), + date.startTime.slice(8,10), 0, 0, 0 + ); + if (fromDate >= currentDate && fromDate <= currentDate) { + response = item; + return; + } + + }); + }); + if (response.status === 'SUCCEEDED') { + res.send(200, response); + } else { + res.send(404, response); + } + } else if (mode === 'daily') { + response = {"summary": [],"requestId":"23c44f3f-f528-4a94-bc0e-f95019729b42","message":"date range not found","status":"FAILED"} + + chartData[type + 'Days'].forEach(function (item) { + item.summary.forEach(function (date, index) { + var currentDate = new Date( + date.startTime.slice(0,4), + (date.startTime.slice(5,7) - 1), + date.startTime.slice(8,10), 0, 0, 0 + ); + + if (fromDate >= currentDate && fromDate <= currentDate) { + if (index + 14 < item.summary.length) { + selectedArray = item.summary.slice(index, (index + 14)); + response = {"summary": selectedArray,"requestId":"23c44f3f-f528-4a94-bc0e-f95019729b42","message":"default\\/STATUS\\n","status":"SUCCEEDED"}; + return; + } + } + + }); + }); + + if (response.status === 'SUCCEEDED') { + res.send(200, response); + } else { + res.send(404, response); + } + + } else { + console.log('error'); + } + + }); + + server.get('/api/entities/top/:entityType', function(req, res) { + var type = req.params.entityType, + start = req.query.start, + end = req.query.end, + from = new Date(start.slice(0,4), (start.slice(5,7)-1), start.slice(8,10), 0, 0, 0), + to = new Date(end.slice(0,4), (end.slice(5,7)-1), end.slice(8,10), 0, 0, 0), + objectToGive = Math.floor(Math.random() * 2), + response; + + response = chartData.topEntities[objectToGive]; + + chartData.topEntities.forEach(function (item) { + //console.log(item); + }); + + if (response.status === 'SUCCEEDED') { + res.send(200, response); + } else { + res.send(404, response); + } + + }); + + server.get('/api/admin/version', function(req, res) { + setTimeout(function(){ + res.send(200, mockData.server); + }, 3000); + }); + + server.get('/api/admin/clearuser', function(req, res) { + res.send(200, "cleared"); + }); + + server.get('/api/admin/getuser', function(req, res) { + res.send(200, "ambari-qa"); + }); + server.listen(PORT, function () { console.log('Dev server listening on port ' + PORT); }); http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/webapp/pom.xml ---------------------------------------------------------------------- diff --git a/webapp/pom.xml b/webapp/pom.xml index 8043ac8..e63aa44 100644 --- a/webapp/pom.xml +++ b/webapp/pom.xml @@ -541,6 +541,9 @@ <artifactId>apache-rat-plugin</artifactId> <configuration> <excludes> + <exclude>**/loginData.json</exclude> + <exclude>**/src/main/webapp/css/*</exclude> + <exclude>**/src/main/webapp/js/*</exclude> <exclude>*.txt</exclude> <exclude>**/*.txt</exclude> <exclude>.git/**</exclude> http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/webapp/src/main/webapp/index.html ---------------------------------------------------------------------- diff --git a/webapp/src/main/webapp/index.html b/webapp/src/main/webapp/index.html index 3dc9c89..13fbe35 100644 --- a/webapp/src/main/webapp/index.html +++ b/webapp/src/main/webapp/index.html @@ -1,31 +1,44 @@ <!-- - 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 +/** + * 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="app"> + <head> + <title>Falcon Web UI</title> + <meta charset="utf-8"> + <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> + <link rel="stylesheet" href="css/main.css"/> + <link rel="icon" type="image/x-icon" + href="data:image/png;base64,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"/> + </head> + <body ng-cloak ng-controller="RootCtrl" id="body"> - http://www.apache.org/licenses/LICENSE-2.0 + <section class="container-fluid"> + <header class="row" nav-header id="mainHeader"></header> + </section> - 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 lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <meta name="Date-Revision-yyyymmdd" content="20130821" /> - <meta http-equiv="Content-Language" content="en" /> - <title>Apache Falcon - Data management and processing platform</title> -</head> -<body class="topBarEnabled"> -<h1> Apache Falcon</h1> -More information at: <a href="http://falcon.apache.org/index.html" title="About">Project Website</a> -</body> + <section class="container-fluid"> + <div class="row mainUIView" ui-view id="mainUIView"></div> + </section> + + <script src="js/vendor.min.js"></script> + <script src="js/main.min.js"></script> + + </body> </html>
