blob: 7050ea58a85ee6a2923ff69bbf169bbb74f74d14 [file] [log] [blame]
{
"pipes": [],
"interfaces": [
{
"name": "HelixRequest",
"id": "interface-HelixRequest-75cdd56f58bc639681072e593c0effa7c1ccba2af537b2a4b93746aa3f1d35e729428000225a04219b1b7ac5ba4629dc5d80383e2b93e47950307e8bff7fffa8",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import { Request } from 'express';\nimport request from 'request';\n\nexport interface HelixRequest extends Request {\n session?: HelixSession;\n}\n\ninterface HelixSession {\n // since this token is from a configurable\n // identity source, the format really is\n // `any` from helix-front's point of view.\n identityToken: any;\n username: string;\n isAdmin: boolean;\n}\n\ntype AgentOptions = {\n rejectUnauthorized: boolean;\n ca?: string;\n};\n\nexport type HelixRequestOptions = {\n url: string;\n json: string;\n headers: request.Headers;\n agentOptions: AgentOptions;\n body?: string;\n};\n",
"properties": [
{
"name": "session",
"deprecated": false,
"deprecationMessage": "",
"type": "HelixSession",
"optional": true,
"description": "",
"line": 5
}
],
"indexSignatures": [],
"kind": 165,
"methods": [],
"extends": "Request"
},
{
"name": "HelixSession",
"id": "interface-HelixSession-75cdd56f58bc639681072e593c0effa7c1ccba2af537b2a4b93746aa3f1d35e729428000225a04219b1b7ac5ba4629dc5d80383e2b93e47950307e8bff7fffa8",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import { Request } from 'express';\nimport request from 'request';\n\nexport interface HelixRequest extends Request {\n session?: HelixSession;\n}\n\ninterface HelixSession {\n // since this token is from a configurable\n // identity source, the format really is\n // `any` from helix-front's point of view.\n identityToken: any;\n username: string;\n isAdmin: boolean;\n}\n\ntype AgentOptions = {\n rejectUnauthorized: boolean;\n ca?: string;\n};\n\nexport type HelixRequestOptions = {\n url: string;\n json: string;\n headers: request.Headers;\n agentOptions: AgentOptions;\n body?: string;\n};\n",
"properties": [
{
"name": "identityToken",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 12
},
{
"name": "isAdmin",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 14
},
{
"name": "username",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 13
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
},
{
"name": "IReplica",
"id": "interface-IReplica-c368277d55c3a276a0743ee15fa8b9d77b202780d749de8a9363f93aaa5331e3afffe77b25bc9fff5156b0be913836c0d7e13b89ebf930d53338f495b6b84e94",
"file": "src/app/resource/shared/resource.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import * as _ from 'lodash';\n\nexport interface IReplica {\n instanceName: string;\n externalView: string;\n idealState: string;\n}\n\nexport class Partition {\n name: string;\n replicas: IReplica[];\n\n get isReady() {\n return !_.some(\n this.replicas,\n (replica) =>\n !replica.externalView || replica.externalView != replica.idealState\n );\n }\n\n constructor(name: string) {\n this.name = name;\n this.replicas = [];\n }\n}\n\nexport class Resource {\n readonly name: string;\n\n // TODO vxu: convert it to an enum in future if necessary\n readonly alive: boolean;\n\n readonly cluster: string;\n\n // meta data\n readonly idealStateMode: string;\n readonly rebalanceMode: string;\n readonly stateModel: string;\n readonly partitionCount: number;\n readonly replicaCount: number;\n\n readonly idealState: any;\n readonly externalView: any;\n\n readonly partitions: Partition[];\n\n get enabled(): boolean {\n // there are two cases meaning enabled both:\n // HELIX_ENABLED: true or no such item in idealState\n return _.get(this.idealState, 'simpleFields.HELIX_ENABLED') != 'false';\n }\n\n get online(): boolean {\n return !_.isEmpty(this.externalView);\n }\n\n constructor(\n cluster: string,\n name: string,\n config: any,\n idealState: any,\n externalView: any\n ) {\n this.cluster = cluster;\n this.name = name;\n\n externalView = externalView || {};\n\n // ignore config for now since config component will fetch itself\n\n this.idealStateMode = idealState.simpleFields.IDEAL_STATE_MODE;\n this.rebalanceMode = idealState.simpleFields.REBALANCE_MODE;\n this.stateModel = idealState.simpleFields.STATE_MODEL_DEF_REF;\n this.partitionCount = +idealState.simpleFields.NUM_PARTITIONS;\n this.replicaCount = +idealState.simpleFields.REPLICAS;\n\n // fetch partition names from externalView.mapFields is (relatively) more stable\n this.partitions = [];\n for (const partitionName in externalView.mapFields) {\n const partition = new Partition(partitionName);\n\n // in FULL_AUTO mode, externalView is more important\n // if preferences list exists, fetch instances from it, else whatever\n if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.listFields[partitionName]\n ) {\n for (const replicaName of idealState.listFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.mapFields[partitionName]\n ) {\n for (const replicaName in idealState.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else {\n for (const replicaName in externalView.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n }\n\n // sort replicas by states\n partition.replicas = _.sortBy(partition.replicas, 'externalView');\n\n this.partitions.push(partition);\n }\n\n this.idealState = idealState;\n this.externalView = externalView;\n }\n}\n",
"properties": [
{
"name": "externalView",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5
},
{
"name": "idealState",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 6
},
{
"name": "instanceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
},
{
"name": "ListFieldObject",
"id": "interface-ListFieldObject-9a579c751dc9ff03063f99c75efe170bbfd4d7dd827c0bcb47ce7e303f211f158d9908ef90c5b54f79dfd5d45ff2c7f95357eccbc3453011fcd26d9e597b9a2c",
"file": "src/app/shared/models/node.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n name: string;\n value: string;\n}\n\ninterface ListFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface Payload {\n id: string;\n simpleFields?: any;\n listFields?: any;\n mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n id: string;\n simpleFields: SimpleFieldObject[] = [];\n listFields: ListFieldObject[] = [];\n mapFields: MapFieldObject[] = [];\n\n constructor(obj: any) {\n if (obj != null) {\n this.id = obj.id;\n this.simpleFields = this.keyValueToArray(obj.simpleFields);\n\n _.forOwn(obj['listFields'], (v, k) => {\n this.listFields.push(<ListFieldObject>{\n name: k,\n value: _.map(\n v,\n (item) =>\n <SimpleFieldObject>{\n value: item,\n }\n ),\n });\n });\n\n _.forOwn(obj['mapFields'], (v, k) => {\n this.mapFields.push(<MapFieldObject>{\n name: k.trim(),\n value: this.keyValueToArray(v),\n });\n });\n }\n }\n\n public appendSimpleField(name: string, value: string) {\n this.simpleFields.push(<SimpleFieldObject>{\n name,\n value,\n });\n }\n\n public appendMapField(key: string, name: string, value: string) {\n const index = _.findIndex(this.mapFields, { name: key });\n if (index >= 0) {\n this.mapFields[index].value.push(<SimpleFieldObject>{\n name: name.trim(),\n value,\n });\n } else {\n this.mapFields.push(<MapFieldObject>{\n name: key,\n value: [\n <SimpleFieldObject>{\n name: name.trim(),\n value,\n },\n ],\n });\n }\n }\n\n public json(id: string): string {\n const obj: Payload = {\n id,\n };\n\n if (this?.simpleFields.length > 0) {\n obj.simpleFields = {};\n _.forEach(this.simpleFields, (item: SimpleFieldObject) => {\n obj.simpleFields[item.name] = item.value;\n });\n }\n\n if (this?.listFields.length > 0) {\n obj.listFields = {};\n _.forEach(this.listFields, (item: ListFieldObject) => {\n obj.listFields[item.name] = [];\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n obj.listFields[item.name].push(subItem.value);\n });\n });\n }\n\n if (this?.mapFields.length > 0) {\n obj.mapFields = {};\n _.forEach(this.mapFields, (item: MapFieldObject) => {\n obj.mapFields[item.name.trim()] = item.value ? {} : null;\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n // if the value is a string that contains all digits, parse it to a number\n let parsedValue: string | number = subItem.value;\n if (\n typeof subItem.value === 'string' &&\n /^\\d+$/.test(subItem.value)\n ) {\n parsedValue = Number(subItem.value);\n }\n\n obj.mapFields[item.name.trim()][subItem.name] = parsedValue;\n });\n });\n }\n\n return JSON.stringify(obj);\n }\n\n // Converting raw simpleFields to SimpleFieldObject[]\n private keyValueToArray(obj: Object): SimpleFieldObject[] {\n const result: SimpleFieldObject[] = [];\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n result.push(<SimpleFieldObject>{\n name: k,\n value: obj[k],\n });\n }\n }\n return result;\n }\n}\n",
"properties": [
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 9
},
{
"name": "value",
"deprecated": false,
"deprecationMessage": "",
"type": "SimpleFieldObject[]",
"optional": false,
"description": "",
"line": 10
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
},
{
"name": "MapFieldObject",
"id": "interface-MapFieldObject-9a579c751dc9ff03063f99c75efe170bbfd4d7dd827c0bcb47ce7e303f211f158d9908ef90c5b54f79dfd5d45ff2c7f95357eccbc3453011fcd26d9e597b9a2c",
"file": "src/app/shared/models/node.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n name: string;\n value: string;\n}\n\ninterface ListFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface Payload {\n id: string;\n simpleFields?: any;\n listFields?: any;\n mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n id: string;\n simpleFields: SimpleFieldObject[] = [];\n listFields: ListFieldObject[] = [];\n mapFields: MapFieldObject[] = [];\n\n constructor(obj: any) {\n if (obj != null) {\n this.id = obj.id;\n this.simpleFields = this.keyValueToArray(obj.simpleFields);\n\n _.forOwn(obj['listFields'], (v, k) => {\n this.listFields.push(<ListFieldObject>{\n name: k,\n value: _.map(\n v,\n (item) =>\n <SimpleFieldObject>{\n value: item,\n }\n ),\n });\n });\n\n _.forOwn(obj['mapFields'], (v, k) => {\n this.mapFields.push(<MapFieldObject>{\n name: k.trim(),\n value: this.keyValueToArray(v),\n });\n });\n }\n }\n\n public appendSimpleField(name: string, value: string) {\n this.simpleFields.push(<SimpleFieldObject>{\n name,\n value,\n });\n }\n\n public appendMapField(key: string, name: string, value: string) {\n const index = _.findIndex(this.mapFields, { name: key });\n if (index >= 0) {\n this.mapFields[index].value.push(<SimpleFieldObject>{\n name: name.trim(),\n value,\n });\n } else {\n this.mapFields.push(<MapFieldObject>{\n name: key,\n value: [\n <SimpleFieldObject>{\n name: name.trim(),\n value,\n },\n ],\n });\n }\n }\n\n public json(id: string): string {\n const obj: Payload = {\n id,\n };\n\n if (this?.simpleFields.length > 0) {\n obj.simpleFields = {};\n _.forEach(this.simpleFields, (item: SimpleFieldObject) => {\n obj.simpleFields[item.name] = item.value;\n });\n }\n\n if (this?.listFields.length > 0) {\n obj.listFields = {};\n _.forEach(this.listFields, (item: ListFieldObject) => {\n obj.listFields[item.name] = [];\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n obj.listFields[item.name].push(subItem.value);\n });\n });\n }\n\n if (this?.mapFields.length > 0) {\n obj.mapFields = {};\n _.forEach(this.mapFields, (item: MapFieldObject) => {\n obj.mapFields[item.name.trim()] = item.value ? {} : null;\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n // if the value is a string that contains all digits, parse it to a number\n let parsedValue: string | number = subItem.value;\n if (\n typeof subItem.value === 'string' &&\n /^\\d+$/.test(subItem.value)\n ) {\n parsedValue = Number(subItem.value);\n }\n\n obj.mapFields[item.name.trim()][subItem.name] = parsedValue;\n });\n });\n }\n\n return JSON.stringify(obj);\n }\n\n // Converting raw simpleFields to SimpleFieldObject[]\n private keyValueToArray(obj: Object): SimpleFieldObject[] {\n const result: SimpleFieldObject[] = [];\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n result.push(<SimpleFieldObject>{\n name: k,\n value: obj[k],\n });\n }\n }\n return result;\n }\n}\n",
"properties": [
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 14
},
{
"name": "value",
"deprecated": false,
"deprecationMessage": "",
"type": "SimpleFieldObject[]",
"optional": false,
"description": "",
"line": 15
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
},
{
"name": "Payload",
"id": "interface-Payload-9a579c751dc9ff03063f99c75efe170bbfd4d7dd827c0bcb47ce7e303f211f158d9908ef90c5b54f79dfd5d45ff2c7f95357eccbc3453011fcd26d9e597b9a2c",
"file": "src/app/shared/models/node.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n name: string;\n value: string;\n}\n\ninterface ListFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface Payload {\n id: string;\n simpleFields?: any;\n listFields?: any;\n mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n id: string;\n simpleFields: SimpleFieldObject[] = [];\n listFields: ListFieldObject[] = [];\n mapFields: MapFieldObject[] = [];\n\n constructor(obj: any) {\n if (obj != null) {\n this.id = obj.id;\n this.simpleFields = this.keyValueToArray(obj.simpleFields);\n\n _.forOwn(obj['listFields'], (v, k) => {\n this.listFields.push(<ListFieldObject>{\n name: k,\n value: _.map(\n v,\n (item) =>\n <SimpleFieldObject>{\n value: item,\n }\n ),\n });\n });\n\n _.forOwn(obj['mapFields'], (v, k) => {\n this.mapFields.push(<MapFieldObject>{\n name: k.trim(),\n value: this.keyValueToArray(v),\n });\n });\n }\n }\n\n public appendSimpleField(name: string, value: string) {\n this.simpleFields.push(<SimpleFieldObject>{\n name,\n value,\n });\n }\n\n public appendMapField(key: string, name: string, value: string) {\n const index = _.findIndex(this.mapFields, { name: key });\n if (index >= 0) {\n this.mapFields[index].value.push(<SimpleFieldObject>{\n name: name.trim(),\n value,\n });\n } else {\n this.mapFields.push(<MapFieldObject>{\n name: key,\n value: [\n <SimpleFieldObject>{\n name: name.trim(),\n value,\n },\n ],\n });\n }\n }\n\n public json(id: string): string {\n const obj: Payload = {\n id,\n };\n\n if (this?.simpleFields.length > 0) {\n obj.simpleFields = {};\n _.forEach(this.simpleFields, (item: SimpleFieldObject) => {\n obj.simpleFields[item.name] = item.value;\n });\n }\n\n if (this?.listFields.length > 0) {\n obj.listFields = {};\n _.forEach(this.listFields, (item: ListFieldObject) => {\n obj.listFields[item.name] = [];\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n obj.listFields[item.name].push(subItem.value);\n });\n });\n }\n\n if (this?.mapFields.length > 0) {\n obj.mapFields = {};\n _.forEach(this.mapFields, (item: MapFieldObject) => {\n obj.mapFields[item.name.trim()] = item.value ? {} : null;\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n // if the value is a string that contains all digits, parse it to a number\n let parsedValue: string | number = subItem.value;\n if (\n typeof subItem.value === 'string' &&\n /^\\d+$/.test(subItem.value)\n ) {\n parsedValue = Number(subItem.value);\n }\n\n obj.mapFields[item.name.trim()][subItem.name] = parsedValue;\n });\n });\n }\n\n return JSON.stringify(obj);\n }\n\n // Converting raw simpleFields to SimpleFieldObject[]\n private keyValueToArray(obj: Object): SimpleFieldObject[] {\n const result: SimpleFieldObject[] = [];\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n result.push(<SimpleFieldObject>{\n name: k,\n value: obj[k],\n });\n }\n }\n return result;\n }\n}\n",
"properties": [
{
"name": "id",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 19
},
{
"name": "listFields",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": true,
"description": "",
"line": 21
},
{
"name": "mapFields",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": true,
"description": "",
"line": 22
},
{
"name": "simpleFields",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": true,
"description": "",
"line": 20
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
},
{
"name": "SimpleFieldObject",
"id": "interface-SimpleFieldObject-9a579c751dc9ff03063f99c75efe170bbfd4d7dd827c0bcb47ce7e303f211f158d9908ef90c5b54f79dfd5d45ff2c7f95357eccbc3453011fcd26d9e597b9a2c",
"file": "src/app/shared/models/node.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "interface",
"sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n name: string;\n value: string;\n}\n\ninterface ListFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface Payload {\n id: string;\n simpleFields?: any;\n listFields?: any;\n mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n id: string;\n simpleFields: SimpleFieldObject[] = [];\n listFields: ListFieldObject[] = [];\n mapFields: MapFieldObject[] = [];\n\n constructor(obj: any) {\n if (obj != null) {\n this.id = obj.id;\n this.simpleFields = this.keyValueToArray(obj.simpleFields);\n\n _.forOwn(obj['listFields'], (v, k) => {\n this.listFields.push(<ListFieldObject>{\n name: k,\n value: _.map(\n v,\n (item) =>\n <SimpleFieldObject>{\n value: item,\n }\n ),\n });\n });\n\n _.forOwn(obj['mapFields'], (v, k) => {\n this.mapFields.push(<MapFieldObject>{\n name: k.trim(),\n value: this.keyValueToArray(v),\n });\n });\n }\n }\n\n public appendSimpleField(name: string, value: string) {\n this.simpleFields.push(<SimpleFieldObject>{\n name,\n value,\n });\n }\n\n public appendMapField(key: string, name: string, value: string) {\n const index = _.findIndex(this.mapFields, { name: key });\n if (index >= 0) {\n this.mapFields[index].value.push(<SimpleFieldObject>{\n name: name.trim(),\n value,\n });\n } else {\n this.mapFields.push(<MapFieldObject>{\n name: key,\n value: [\n <SimpleFieldObject>{\n name: name.trim(),\n value,\n },\n ],\n });\n }\n }\n\n public json(id: string): string {\n const obj: Payload = {\n id,\n };\n\n if (this?.simpleFields.length > 0) {\n obj.simpleFields = {};\n _.forEach(this.simpleFields, (item: SimpleFieldObject) => {\n obj.simpleFields[item.name] = item.value;\n });\n }\n\n if (this?.listFields.length > 0) {\n obj.listFields = {};\n _.forEach(this.listFields, (item: ListFieldObject) => {\n obj.listFields[item.name] = [];\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n obj.listFields[item.name].push(subItem.value);\n });\n });\n }\n\n if (this?.mapFields.length > 0) {\n obj.mapFields = {};\n _.forEach(this.mapFields, (item: MapFieldObject) => {\n obj.mapFields[item.name.trim()] = item.value ? {} : null;\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n // if the value is a string that contains all digits, parse it to a number\n let parsedValue: string | number = subItem.value;\n if (\n typeof subItem.value === 'string' &&\n /^\\d+$/.test(subItem.value)\n ) {\n parsedValue = Number(subItem.value);\n }\n\n obj.mapFields[item.name.trim()][subItem.name] = parsedValue;\n });\n });\n }\n\n return JSON.stringify(obj);\n }\n\n // Converting raw simpleFields to SimpleFieldObject[]\n private keyValueToArray(obj: Object): SimpleFieldObject[] {\n const result: SimpleFieldObject[] = [];\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n result.push(<SimpleFieldObject>{\n name: k,\n value: obj[k],\n });\n }\n }\n return result;\n }\n}\n",
"properties": [
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4
},
{
"name": "value",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5
}
],
"indexSignatures": [],
"kind": 165,
"methods": []
}
],
"injectables": [
{
"name": "ChooserService",
"id": "injectable-ChooserService-a01943bd10a04d42bc6a8ac6d54b31f99803f30f339557d926933c7f2dfddeb933814f7866498710996c97dddac7789e68e0cc0ca84ce9642644d11b0610c190",
"file": "src/app/chooser/shared/chooser.service.ts",
"properties": [],
"methods": [
{
"name": "getAll",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 7,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\n\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class ChooserService extends HelixService {\n public getAll() {\n return this.request(`/list`, '');\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "ClusterService",
"id": "injectable-ClusterService-1b7c5db1def61476053458bfd34ed41240ad6e103043443492ad80db7a658c7b17903da30e6b5ef6d27e6a8b8328f61e4e04bb8c9fcae6e5ba79bc784ed5ccdf",
"file": "src/app/cluster/shared/cluster.service.ts",
"properties": [],
"methods": [
{
"name": "activate",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "superCluster",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 37,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "superCluster",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "create",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 21,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "disable",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 33,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "disableMaintenanceMode",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 50,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "enable",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 29,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "enableMaintenanceMode",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "reason",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 44,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "reason",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "get",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 15,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getAll",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 9,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
]
},
{
"name": "remove",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 25,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Cluster } from './cluster.model';\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class ClusterService extends HelixService {\n public getAll() {\n return this.request('/clusters').pipe(\n map((data) => data.clusters.sort().map((name) => <Cluster>{ name }))\n );\n }\n\n public get(name: string) {\n return this.request(`/clusters/${name}`).pipe(\n map((data) => new Cluster(data))\n );\n }\n\n public create(name: string) {\n return this.put(`/clusters/${name}`, null);\n }\n\n public remove(name: string) {\n return this.delete(`/clusters/${name}`);\n }\n\n public enable(name: string) {\n return this.post(`/clusters/${name}?command=enable`, null);\n }\n\n public disable(name: string) {\n return this.post(`/clusters/${name}?command=disable`, null);\n }\n\n public activate(name: string, superCluster: string) {\n return this.post(\n `/clusters/${name}?command=activate&superCluster=${superCluster}`,\n null\n );\n }\n\n public enableMaintenanceMode(name: string, reason: string) {\n return this.post(`/clusters/${name}?command=enableMaintenanceMode`, {\n reason,\n });\n }\n\n public disableMaintenanceMode(name: string) {\n return this.post(`/clusters/${name}?command=disableMaintenanceMode`, null);\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "ConfigurationService",
"id": "injectable-ConfigurationService-534b30e63399b706eee2a76fbb8d44a72de6ee2c61b3a7f527e7cc195d0abd5046bb0e618a1907c090432d0219d36c58192d392fb25fdfa2a065583c7115e949",
"file": "src/app/configuration/shared/configuration.service.ts",
"properties": [],
"methods": [
{
"name": "deleteClusterConfig",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 19,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "deleteInstanceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 43,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "deleteResourceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 71,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getClusterConfig",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 8,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getInstanceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 26,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getResourceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 54,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "setClusterConfig",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 12,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "setInstanceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "setResourceConfig",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 60,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "Node",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\n\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class ConfigurationService extends HelixService {\n public getClusterConfig(name: string) {\n return this.request(`/clusters/${name}/configs`);\n }\n\n public setClusterConfig(name: string, config: Node) {\n return this.post(\n `/clusters/${name}/configs?command=update`,\n JSON.parse(config.json(name))\n );\n }\n\n public deleteClusterConfig(name: string, config: Node) {\n return this.post(\n `/clusters/${name}/configs?command=delete`,\n JSON.parse(config.json(name))\n );\n }\n\n public getInstanceConfig(clusterName: string, instanceName: string) {\n return this.request(\n `/clusters/${clusterName}/instances/${instanceName}/configs`\n );\n }\n\n public setInstanceConfig(\n clusterName: string,\n instanceName: string,\n config: Node\n ) {\n return this.post(\n `/clusters/${clusterName}/instances/${instanceName}/configs?command=update`,\n JSON.parse(config.json(instanceName))\n );\n }\n\n public deleteInstanceConfig(\n clusterName: string,\n instanceName: string,\n config: Node\n ) {\n return this.post(\n `/clusters/${clusterName}/instances/${instanceName}/configs?command=delete`,\n JSON.parse(config.json(instanceName))\n );\n }\n\n public getResourceConfig(clusterName: string, resourceName: string) {\n return this.request(\n `/clusters/${clusterName}/resources/${resourceName}/configs`\n );\n }\n\n public setResourceConfig(\n clusterName: string,\n resourceName: string,\n config: Node\n ) {\n return this.post(\n `/clusters/${clusterName}/resources/${resourceName}/configs?command=update`,\n JSON.parse(config.json(resourceName))\n );\n }\n\n public deleteResourceConfig(\n clusterName: string,\n resourceName: string,\n config: Node\n ) {\n return this.post(\n `/clusters/${clusterName}/resources/${resourceName}/configs?command=delete`,\n JSON.parse(config.json(resourceName))\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "ControllerService",
"id": "injectable-ControllerService-e18b1d2fe2d7f227243c3e164cabeb8728a8ef12a63bac05a25740668d7e3182dbff7da3afdf9d95332bedfde44222f90c2c63e8622cfbe92d9f4a7d8fbf2c89",
"file": "src/app/controller/shared/controller.service.ts",
"properties": [],
"methods": [
{
"name": "get",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 9,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\n\nimport { HelixService } from '../../core/helix.service';\nimport { Controller } from './controller.model';\n\n@Injectable()\nexport class ControllerService extends HelixService {\n public get(clusterName: string) {\n return this.request(`/clusters/${clusterName}/controller`).pipe(\n map(\n (data) =>\n new Controller(\n data.controller,\n clusterName,\n data.LIVE_INSTANCE,\n data.SESSION_ID,\n data.HELIX_VERSION\n )\n )\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "HelixService",
"id": "injectable-HelixService-e653d0fe460a0cb3e3ccaaddca32d07afcd5cfe0bd3e22d86fe88ce34d53e5d129fdcf54cd51b745bd9a852f9c4b15d5b45648903a57f2ac06e90b7b136dfd0e",
"file": "src/app/core/helix.service.ts",
"properties": [],
"methods": [
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
]
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { throwError as observableThrowError, Observable } from 'rxjs';\n\nimport { catchError } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders, HttpClient, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\n\nimport { Settings } from './settings';\n\n@Injectable()\nexport class HelixService {\n constructor(protected router: Router, private http: HttpClient) {}\n\n public can(): Observable<any> {\n return this.http\n .get(`${Settings.userAPI}/can`, { headers: this.getHeaders() })\n .pipe(catchError(this.errorHandler));\n }\n\n protected request(path: string, helix?: string): Observable<any> {\n if (helix == null) {\n helix = this.getHelixKey();\n }\n\n return this.http\n .get(`${Settings.helixAPI}${helix}${path}`, {\n headers: this.getHeaders(),\n })\n .pipe(catchError(this.errorHandler));\n }\n\n protected post(path: string, data: any): Observable<any> {\n return this.http\n .post(`${Settings.helixAPI}${this.getHelixKey()}${path}`, data, {\n headers: this.getHeaders(),\n })\n .pipe(catchError(this.errorHandler));\n }\n\n protected put(path: string, data: string): Observable<any> {\n return this.http\n .put(`${Settings.helixAPI}${this.getHelixKey()}${path}`, data, {\n headers: this.getHeaders(),\n })\n .pipe(catchError(this.errorHandler));\n }\n\n protected delete(path: string): Observable<any> {\n return this.http\n .delete(`${Settings.helixAPI}${this.getHelixKey()}${path}`, {\n headers: this.getHeaders(),\n })\n .pipe(catchError(this.errorHandler));\n }\n\n protected getHelixKey(): string {\n // fetch helix key from url\n return `/${this.router.url.split('/')[1]}`;\n }\n\n protected getHeaders() {\n const headers = new HttpHeaders();\n headers.append('Accept', 'application/json');\n headers.append('Content-Type', 'application/json');\n return headers;\n }\n\n protected errorHandler(error: any) {\n console.error(error);\n\n let message = error.message || 'Cannot reach Helix restful service.';\n\n if (error instanceof HttpResponse) {\n if (error.status == 404) {\n // rest api throws 404 directly to app without any wrapper\n message = 'Not Found';\n } else {\n message = error;\n try {\n message = JSON.parse(message).error;\n } catch (e) {}\n }\n }\n\n return observableThrowError(message);\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "http",
"type": "HttpClient",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 11,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "http",
"type": "HttpClient",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"type": "injectable"
},
{
"name": "HelperService",
"id": "injectable-HelperService-78f7b16aa1126cfdcb732f98106aeca50cabf9c533da6d678fa074bd5eb9416856852ea358598d7cee135fb02a055d94872ed1648c8b65111b8a67ce96ec9a42",
"file": "src/app/shared/helper.service.ts",
"properties": [],
"methods": [
{
"name": "parseMessage",
"args": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 12,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
121
],
"jsdoctags": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "showConfirmation",
"args": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "title",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
},
{
"name": "confirmButtonText",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 33,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "title",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
},
{
"name": "confirmButtonText",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
]
},
{
"name": "showError",
"args": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 18,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "showSnackBar",
"args": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 27,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "message",
"type": "string | object",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { AlertDialogComponent } from './dialog/alert-dialog/alert-dialog.component';\nimport { ConfirmDialogComponent } from './dialog/confirm-dialog/confirm-dialog.component';\n\n@Injectable()\nexport class HelperService {\n constructor(protected snackBar: MatSnackBar, protected dialog: MatDialog) {}\n\n private parseMessage(message: string | object) {\n return typeof message === 'string'\n ? message\n : JSON.stringify(message, null, 2);\n }\n\n showError(message: string | object) {\n this.dialog.open(AlertDialogComponent, {\n data: {\n title: 'Error',\n message: this.parseMessage(message),\n },\n });\n }\n\n showSnackBar(message: string | object) {\n this.snackBar.open(this.parseMessage(message), 'OK', {\n duration: 2000,\n });\n }\n\n showConfirmation(\n message: string | object,\n title?: string,\n confirmButtonText?: string\n ) {\n return this.dialog\n .open(ConfirmDialogComponent, {\n data: {\n message: this.parseMessage(message),\n title,\n confirmButtonText,\n },\n })\n .afterClosed()\n .toPromise();\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "snackBar",
"type": "MatSnackBar",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 9,
"jsdoctags": [
{
"name": "snackBar",
"type": "MatSnackBar",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"type": "injectable"
},
{
"name": "HistoryService",
"id": "injectable-HistoryService-0856a46bf5ac8ba0eca7384ff6c44ef826d4bd38ba6e0aa1ffcc3861f635640f9ac7dac7728d93d2d08bc779954327b7b2d796416b9508cbc03fff23ab6141fe",
"file": "src/app/history/shared/history.service.ts",
"properties": [],
"methods": [
{
"name": "getControllerHistory",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 10,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getInstanceHistory",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 16,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "parseHistory",
"args": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "History[]",
"typeParameters": [],
"line": 23,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport * as _ from 'lodash';\n\nimport { HelixService } from '../../core/helix.service';\nimport { History } from './history.model';\n\n@Injectable()\nexport class HistoryService extends HelixService {\n getControllerHistory(clusterName: string) {\n return this.request(`/clusters/${clusterName}/controller/history`).pipe(\n map((data) => this.parseHistory(data.history))\n );\n }\n\n getInstanceHistory(clusterName: string, instanceName: string) {\n return this.request(\n `/clusters/${clusterName}/instances/${instanceName}/history`\n ).pipe(map((data) => this.parseHistory(data.listFields.HISTORY)));\n // TODO: implement data.simpleFields.LAST_OFFLINE_TIME\n }\n\n protected parseHistory(data: any): History[] {\n const histories: History[] = [];\n\n if (data) {\n for (const record of data) {\n // controller: {DATE=2017-04-13-22:33:55, CONTROLLER=ltx1-app1133.stg.linkedin.com_12923, TIME=1492122835198}\n // instance: {DATE=2017-05-01T08:21:42:114, SESSION=55a8e28052bcb56, TIME=1493626902114}\n const history = new History();\n\n for (const seg of _.words(record, /[^{}, ]+/g)) {\n const name = _.words(seg, /[^=]+/g)[0];\n const value = _.words(seg, /[^=]+/g)[1];\n if (name == 'DATE') {\n history.date = value;\n } else if (name == 'CONTROLLER') {\n history.controller = value;\n } else if (name == 'SESSION') {\n history.session = value;\n } else if (name == 'TIME') {\n history.time = +value;\n }\n }\n\n histories.push(history);\n }\n }\n\n return histories;\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "InstanceService",
"id": "injectable-InstanceService-2c2587cea833c5ef5e0ea6fb4d4f0a0139c732b150bb4e64ffd50a4f765c73b000408e21e16d1ea7dc7fea5609846c038027520fac44b259171cba2401104b4f",
"file": "src/app/instance/shared/instance.service.ts",
"properties": [],
"methods": [
{
"name": "create",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "host",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "port",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enabled",
"type": "boolean",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 59,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "host",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "port",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "enabled",
"type": "boolean",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "disable",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 89,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "enable",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 82,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "get",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 31,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getAll",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 10,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "remove",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 78,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Instance } from './instance.model';\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class InstanceService extends HelixService {\n public getAll(clusterName: string) {\n return this.request(`/clusters/${clusterName}/instances`).pipe(\n map((data) => {\n const onlineInstances = data.online;\n const disabledInstances = data.disabled;\n\n return data.instances\n .sort()\n .map(\n (name) =>\n new Instance(\n name,\n clusterName,\n disabledInstances.indexOf(name) < 0,\n onlineInstances.indexOf(name) >= 0\n )\n );\n })\n );\n }\n\n public get(clusterName: string, instanceName: string) {\n return this.request(\n `/clusters/${clusterName}/instances/${instanceName}`\n ).pipe(\n map((data) => {\n const liveInstance = data.liveInstance;\n const config = data.config;\n // there are two cases meaning enabled both:\n // HELIX_ENABLED: true or no such configuration\n const enabled =\n config &&\n config.simpleFields &&\n config.simpleFields.HELIX_ENABLED != 'false';\n\n return liveInstance && liveInstance.simpleFields\n ? new Instance(\n data.id,\n clusterName,\n enabled,\n liveInstance.simpleFields.LIVE_INSTANCE,\n liveInstance.simpleFields.SESSION_ID,\n liveInstance.simpleFields.HELIX_VERSION\n )\n : new Instance(data.id, clusterName, enabled, null);\n })\n );\n }\n\n public create(\n clusterName: string,\n host: string,\n port: string,\n enabled: boolean\n ) {\n const name = `${host}_${port}`;\n\n const node = new Node(null);\n node.appendSimpleField('HELIX_ENABLED', enabled ? 'true' : 'false');\n node.appendSimpleField('HELIX_HOST', host);\n node.appendSimpleField('HELIX_PORT', port);\n\n return this.put(\n `/clusters/${clusterName}/instances/${name}`,\n JSON.parse(node.json(name))\n );\n }\n\n public remove(clusterName: string, instanceName: string) {\n return this.delete(`/clusters/${clusterName}/instances/${instanceName}`);\n }\n\n public enable(clusterName: string, instanceName: string) {\n return this.post(\n `/clusters/${clusterName}/instances/${instanceName}?command=enable`,\n null\n );\n }\n\n public disable(clusterName: string, instanceName: string) {\n return this.post(\n `/clusters/${clusterName}/instances/${instanceName}?command=disable`,\n null\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "JobService",
"id": "injectable-JobService-fef83c02a25f30b79efa2ddd918848e59bfb5cef17a4ea4320a9e8a5e2682778cf62d5a1761d1a0d312ffbac4a305d68845f2c91c4bd7ea12620f7c87f03f10c",
"file": "src/app/workflow/shared/job.service.ts",
"properties": [],
"methods": [
{
"name": "get",
"args": [
{
"name": "job",
"type": "Job",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 9,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "job",
"type": "Job",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\n\nimport { Job } from './workflow.model';\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class JobService extends HelixService {\n public get(job: Job) {\n return this.request(\n `/clusters/${job.clusterName}/workflows/${job.workflowName}/jobs/${job.rawName}`\n ).pipe(\n map((data) => {\n job.config = data.JobConfig;\n job.context = data.JobContext;\n })\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "ResourceService",
"id": "injectable-ResourceService-d7fa0780b63fe6ffeb56522e7f59c8396d8b73e5d908c3224cdf4c382d0c68d3cf619098234bf3acc62847eeff9e4c1b55e941ebc17512fb7fd744381d335918",
"file": "src/app/resource/shared/resource.service.ts",
"properties": [],
"methods": [
{
"name": "disable",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 102,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "enable",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 95,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "get",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 46,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getAll",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 12,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getAllOnInstance",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 28,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getOnInstance",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 63,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "remove",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 109,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "setIdealState",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "idealState",
"type": "IdealState",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 113,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "idealState",
"type": "IdealState",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport * as _ from 'lodash';\n\nimport { IdealState } from '../../shared/node-viewer/node-viewer.component';\nimport { HelixService } from '../../core/helix.service';\nimport { Resource } from './resource.model';\n\n@Injectable()\nexport class ResourceService extends HelixService {\n public getAll(clusterName: string) {\n return this.request(`/clusters/${clusterName}/resources`).pipe(\n map((data) => {\n const res: Resource[] = [];\n for (const name of data.idealStates) {\n res.push(<Resource>{\n cluster: clusterName,\n name,\n alive: data.externalViews.indexOf(name) >= 0,\n });\n }\n return _.sortBy(res, 'name');\n })\n );\n }\n\n public getAllOnInstance(clusterName: string, instanceName: string) {\n return this.request(\n `/clusters/${clusterName}/instances/${instanceName}/resources`\n ).pipe(\n map((data) => {\n const res: any[] = [];\n if (data) {\n for (const resource of data.resources) {\n res.push({\n name: resource,\n });\n }\n }\n return res;\n })\n );\n }\n\n public get(clusterName: string, resourceName: string) {\n return this.request(\n `/clusters/${clusterName}/resources/${resourceName}`\n ).pipe(\n map(\n (data) =>\n new Resource(\n clusterName,\n resourceName,\n data.resourceConfig,\n data.idealState,\n data.externalView\n )\n )\n );\n }\n\n public getOnInstance(\n clusterName: string,\n instanceName: string,\n resourceName: string\n ) {\n return this.request(\n `/clusters/${clusterName}/instances/${instanceName}/resources/${resourceName}`\n ).pipe(\n map((data) => {\n const ret = {\n bucketSize: data.simpleFields.BUCKET_SIZE,\n sessionId: data.simpleFields.SESSION_ID,\n stateModelDef: data.simpleFields.STATE_MODEL_DEF,\n stateModelFactoryName: data.simpleFields.STATE_MODEL_FACTORY_NAME,\n partitions: [],\n };\n\n for (const partition in data.mapFields) {\n const par = data.mapFields[partition];\n\n ret.partitions.push({\n name: partition.trim(),\n currentState: par.CURRENT_STATE.trim(),\n info: par.INFO.trim(),\n });\n }\n\n return ret;\n })\n );\n }\n\n public enable(clusterName: string, resourceName: string) {\n return this.post(\n `/clusters/${clusterName}/resources/${resourceName}?command=enable`,\n null\n );\n }\n\n public disable(clusterName: string, resourceName: string) {\n return this.post(\n `/clusters/${clusterName}/resources/${resourceName}?command=disable`,\n null\n );\n }\n\n public remove(clusterName: string, resourceName: string) {\n return this.delete(`/clusters/${clusterName}/resources/${resourceName}`);\n }\n\n public setIdealState(\n clusterName: string,\n resourceName: string,\n idealState: IdealState\n ) {\n return this.post(\n `/clusters/${clusterName}/resources/${resourceName}/idealState?command=update`,\n idealState\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
},
{
"name": "UserService",
"id": "injectable-UserService-2a559e9de77788ab67a482b24cd008b5479b961e03aa9ce590bd050c807d2489d486f4ee5291c5128e0b0f006871e0d53b83722bdfc58e027201f9c68df29265",
"file": "src/app/core/user.service.ts",
"properties": [],
"methods": [
{
"name": "getCurrentUser",
"args": [],
"optional": false,
"returnType": "Observable<>",
"typeParameters": [],
"line": 13,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
]
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 29,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "login",
"args": [
{
"name": "username",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "password",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 19,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "username",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "password",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { catchError } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders, HttpClient, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Settings } from './settings';\n\n@Injectable()\nexport class UserService {\n constructor(protected router: Router, private http: HttpClient) {}\n\n public getCurrentUser(): Observable<unknown> {\n return this.http\n .get(`${Settings.userAPI}/current`, { headers: this.getHeaders() })\n .pipe(catchError((_) => _));\n }\n\n public login(username: string, password: string): Observable<any> {\n const url = `${Settings.userAPI}/login`;\n const body = { username, password };\n const options = {\n headers: this.getHeaders(),\n observe: 'response' as 'body',\n };\n return this.http.post<any>(url, body, options);\n }\n\n protected getHeaders() {\n const headers = new HttpHeaders();\n headers.append('Accept', 'application/json');\n headers.append('Content-Type', 'application/json');\n return headers;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "http",
"type": "HttpClient",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 10,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "http",
"type": "HttpClient",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"type": "injectable"
},
{
"name": "WorkflowService",
"id": "injectable-WorkflowService-85e21faff5d452736b6cb53e871096dcea379cb58fe79e56e9a52c34d7b8cf0446e4e56bee802921684c88b9b89b5c8e802169485a916343d7ae1bef8e3c9949",
"file": "src/app/workflow/shared/workflow.service.ts",
"properties": [],
"methods": [
{
"name": "get",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 15,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getAll",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 9,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "resume",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 28,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "stop",
"args": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 21,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "can",
"args": [],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "delete",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "errorHandler",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHeaders",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "getHelixKey",
"args": [],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 56,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "post",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "put",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
},
{
"name": "request",
"args": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"optional": false,
"returnType": "Observable<any>",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "path",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helix",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
],
"inheritance": {
"file": "HelixService"
}
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Workflow } from './workflow.model';\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class WorkflowService extends HelixService {\n public getAll(clusterName: string) {\n return this.request(`/clusters/${clusterName}/workflows`).pipe(\n map((data) => data.Workflows.sort())\n );\n }\n\n public get(clusterName: string, workflowName: string) {\n return this.request(\n `/clusters/${clusterName}/workflows/${workflowName}`\n ).pipe(map((data) => new Workflow(data, clusterName)));\n }\n\n public stop(clusterName: string, workflowName: string) {\n return this.post(\n `/clusters/${clusterName}/workflows/${workflowName}?command=stop`,\n null\n );\n }\n\n public resume(clusterName: string, workflowName: string) {\n return this.post(\n `/clusters/${clusterName}/workflows/${workflowName}?command=resume`,\n null\n );\n }\n}\n",
"extends": "HelixService",
"type": "injectable"
}
],
"guards": [
{
"name": "ClusterResolver",
"id": "injectable-ClusterResolver-9c612ee9ba6201e972e133d0a1d944173f16621d268fb4f0e239454d345351d2c68f0c3587c6d75ad69a29ae190d2ce2e31f9a480dbbaf4a41dbd86caa072287",
"file": "src/app/cluster/shared/cluster.resolver.ts",
"properties": [],
"methods": [
{
"name": "resolve",
"args": [
{
"name": "route",
"type": "ActivatedRouteSnapshot",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 13,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRouteSnapshot",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ClusterService } from './cluster.service';\nimport { Cluster } from './cluster.model';\n\n/* not using this resolver for now since it will break the page when reload the page */\n\n@Injectable()\nexport class ClusterResolver implements Resolve<Cluster> {\n constructor(private clusterService: ClusterService) {}\n\n resolve(route: ActivatedRouteSnapshot) {\n return this.clusterService.get(route.paramMap.get('name'));\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 10,
"jsdoctags": [
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"type": "guard"
},
{
"name": "ResourceResolver",
"id": "injectable-ResourceResolver-69d0d87d951b19b387ed5bc0b9a19e4fe13233512091ce661f3250fb9afb8c47981e10c191a64682aac064718cf2dd86343b4f5ce482589dad16064c3b22cf0a",
"file": "src/app/resource/shared/resource.resolver.ts",
"properties": [],
"methods": [
{
"name": "resolve",
"args": [
{
"name": "route",
"type": "ActivatedRouteSnapshot",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 11,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRouteSnapshot",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"description": "",
"rawdescription": "\n",
"sourceCode": "import { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ResourceService } from './resource.service';\nimport { Resource } from './resource.model';\n\n@Injectable()\nexport class ResourceResolver implements Resolve<Resource> {\n constructor(private service: ResourceService) {}\n\n resolve(route: ActivatedRouteSnapshot) {\n return this.service.get(\n route.paramMap.get('cluster_name'),\n route.paramMap.get('resource_name')\n );\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 8,
"jsdoctags": [
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"type": "guard"
}
],
"interceptors": [],
"classes": [
{
"name": "Cluster",
"id": "class-Cluster-c1f2aa58df3c1b4a5ee8191a1384aef377a2eff10b9f45c5844038779a7cf3285dc8a6592b632e8bc464b7dd159e88973838b3418609b4360e3446f7a1562ae6",
"file": "src/app/cluster/shared/cluster.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import { Instance } from '../../instance/shared/instance.model';\n\nexport class Cluster {\n readonly name: string;\n readonly controller: string;\n readonly enabled: boolean;\n readonly instances: Instance[];\n readonly inMaintenance: boolean;\n\n // TODO vxu: Resources are useless here. Remove it please.\n readonly resources: string[];\n\n // TODO vxu: convert it to use StateModel[]\n readonly stateModels: string[];\n\n config: Object;\n\n constructor(obj: any) {\n this.name = obj.id;\n this.controller = obj.controller;\n this.enabled = !obj.paused;\n this.resources = obj.resources;\n this.inMaintenance = obj.maintenance;\n\n const ins: Instance[] = [];\n for (const instance of obj.instances) {\n ins.push(\n new Instance(\n instance,\n this.name,\n false, // here's a dummy value. should not be used\n obj.liveInstances.indexOf(instance) >= 0\n )\n );\n }\n this.instances = ins;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 16,
"jsdoctags": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "config",
"deprecated": false,
"deprecationMessage": "",
"type": "Object",
"optional": false,
"description": "",
"line": 16
},
{
"name": "controller",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5,
"modifierKind": [
144
]
},
{
"name": "enabled",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 6,
"modifierKind": [
144
]
},
{
"name": "inMaintenance",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 8,
"modifierKind": [
144
]
},
{
"name": "instances",
"deprecated": false,
"deprecationMessage": "",
"type": "Instance[]",
"optional": false,
"description": "",
"line": 7,
"modifierKind": [
144
]
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4,
"modifierKind": [
144
]
},
{
"name": "resources",
"deprecated": false,
"deprecationMessage": "",
"type": "string[]",
"optional": false,
"description": "",
"line": 11,
"modifierKind": [
144
]
},
{
"name": "stateModels",
"deprecated": false,
"deprecationMessage": "",
"type": "string[]",
"optional": false,
"description": "",
"line": 14,
"modifierKind": [
144
]
}
],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Controller",
"id": "class-Controller-7f265dc6f9986ab6592ca819cce00be66cf76643eefab7fc0a7d63b7fc7f0483fc92ad1a73ae51dbcb023e11eeed17e7c2caecc588e0564eeb0e6ee7b6e9bdca",
"file": "src/app/controller/shared/controller.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "export class Controller {\n readonly name: string;\n readonly clusterName: string;\n readonly liveInstance: string;\n readonly sessionId: string;\n readonly helixVersion: string;\n\n constructor(name, cluster, liveInstance, sessionId, version) {\n this.name = name;\n this.clusterName = cluster;\n this.liveInstance = liveInstance;\n this.sessionId = sessionId;\n this.helixVersion = version;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "name",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "cluster",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "liveInstance",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "sessionId",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "version",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 6,
"jsdoctags": [
{
"name": "name",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "cluster",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "liveInstance",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "sessionId",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "version",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 3,
"modifierKind": [
144
]
},
{
"name": "helixVersion",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 6,
"modifierKind": [
144
]
},
{
"name": "liveInstance",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4,
"modifierKind": [
144
]
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 2,
"modifierKind": [
144
]
},
{
"name": "sessionId",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5,
"modifierKind": [
144
]
}
],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "HelixCtrl",
"id": "class-HelixCtrl-5ea8b5cb0aae1dbdc946600b8fbf894ff871be85d84f8a486813da2ddc8aa838fbcce31f41a64d71a36c7f7cd7c34e37452a65b83ab2a88beb930712e9f26d41",
"file": "server/controllers/helix.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import { Request, Response, Router } from 'express';\nimport * as request from 'request';\nimport { readFileSync } from 'fs';\n\nimport { HELIX_ENDPOINTS, IDENTITY_TOKEN_SOURCE, SSL } from '../config';\nimport { HelixRequest, HelixRequestOptions } from './d';\n\nexport class HelixCtrl {\n static readonly ROUTE_PREFIX = '/api/helix';\n\n constructor(router: Router) {\n router.route('/helix/list').get(this.list);\n router.route('/helix/*').all(this.proxy);\n }\n\n protected proxy(req: HelixRequest, res: Response) {\n const url = req.originalUrl.replace(HelixCtrl.ROUTE_PREFIX, '');\n const helixKey = url.split('/')[1];\n\n const segments = helixKey.split('.');\n const group = segments[0];\n\n segments.shift();\n const name = segments.join('.');\n\n const user = req.session.username;\n const method = req.method.toLowerCase();\n if (method != 'get' && !req.session.isAdmin) {\n res.status(403).send('Forbidden');\n return;\n }\n\n let apiPrefix = null;\n if (HELIX_ENDPOINTS[group]) {\n HELIX_ENDPOINTS[group].forEach((section) => {\n if (section[name]) {\n apiPrefix = section[name];\n }\n });\n }\n\n if (apiPrefix) {\n const realUrl = apiPrefix + url.replace(`/${helixKey}`, '');\n console.log(`helix-rest request url ${realUrl}`);\n\n const options: HelixRequestOptions = {\n url: realUrl,\n json: req.body,\n headers: {\n 'Helix-User': user,\n },\n agentOptions: {\n rejectUnauthorized: false,\n },\n };\n\n if (SSL.cafiles.length > 0) {\n options.agentOptions.ca = readFileSync(SSL.cafiles[0], {\n encoding: 'utf-8',\n });\n }\n\n if (IDENTITY_TOKEN_SOURCE) {\n options.headers['Identity-Token'] =\n res.locals.cookie['helixui_identity.token'];\n }\n\n request[method](options, (error, response, body) => {\n if (error) {\n res.status(response?.statusCode || 500).send(error);\n } else if (body?.error) {\n res.status(response?.statusCode || 500).send(body?.error);\n } else {\n res.status(response?.statusCode).send(body);\n }\n });\n } else {\n res.status(404).send('Not found');\n }\n }\n\n protected list(req: Request, res: Response) {\n try {\n res.json(HELIX_ENDPOINTS);\n } catch (err) {\n console.log('error from helix/list/');\n console.log(err);\n }\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 9,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "ROUTE_PREFIX",
"defaultValue": "'/api/helix'",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 9,
"modifierKind": [
124,
144
]
}
],
"methods": [
{
"name": "list",
"args": [
{
"name": "req",
"type": "Request",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 82,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "req",
"type": "Request",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "proxy",
"args": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 16,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "History",
"id": "class-History-c64eab3aa4cb0c4bee4bb7df7e9e6022f1abaaae78825fe4846212b836312357f34ee93a07a0fc104ef93dfc26f45788d9deb0c97fff5a00ed0616dc96d7b636",
"file": "src/app/history/shared/history.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "export class History {\n date: string;\n time: number;\n session: string;\n controller: string;\n}\n",
"properties": [
{
"name": "controller",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5
},
{
"name": "date",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 2
},
{
"name": "session",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4
},
{
"name": "time",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 3
}
],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Instance",
"id": "class-Instance-20a4fcb9146bbfd88d80b1f0bdf5cc941c90576680272085fc3b8d82a5960793d4cd3648b3f0e8c408a06e7002bf6a23fcac011937ce826b7ec6d43d78d6786f",
"file": "src/app/instance/shared/instance.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "export class Instance {\n readonly name: string;\n readonly clusterName: string;\n readonly enabled: boolean;\n readonly liveInstance: boolean | string;\n readonly sessionId: string;\n readonly helixVersion: string;\n\n get healthy(): boolean {\n return this.liveInstance && this.enabled;\n }\n\n constructor(\n name: string,\n clusterName: string,\n enabled: boolean,\n liveInstance: boolean | string,\n sessionId?: string,\n helixVersion?: string\n ) {\n this.name = name;\n this.clusterName = clusterName;\n this.enabled = enabled;\n this.liveInstance = liveInstance;\n this.sessionId = sessionId;\n this.helixVersion = helixVersion;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enabled",
"type": "boolean",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "liveInstance",
"type": "boolean | string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "sessionId",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
},
{
"name": "helixVersion",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true
}
],
"line": 11,
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "enabled",
"type": "boolean",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "liveInstance",
"type": "boolean | string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "sessionId",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
},
{
"name": "helixVersion",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"optional": true,
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 3,
"modifierKind": [
144
]
},
{
"name": "enabled",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 4,
"modifierKind": [
144
]
},
{
"name": "helixVersion",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 7,
"modifierKind": [
144
]
},
{
"name": "liveInstance",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean | string",
"optional": false,
"description": "",
"line": 5,
"modifierKind": [
144
]
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 2,
"modifierKind": [
144
]
},
{
"name": "sessionId",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 6,
"modifierKind": [
144
]
}
],
"methods": [],
"indexSignatures": [],
"accessors": {
"healthy": {
"name": "healthy",
"getSignature": {
"name": "healthy",
"type": "boolean",
"returnType": "boolean",
"line": 9
}
}
},
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Job",
"id": "class-Job-dbb6f7398f86a1c9a4e4300cce9fdb5aef458214a868cf6f220016cd48f791cee0f14a555aaae4d2ce8878b40b7c2dda7ad6764dec02e27cdf5fa25348b18875",
"file": "src/app/workflow/shared/workflow.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\nexport class Task {}\n\nexport class Job {\n readonly name: string;\n readonly rawName: string;\n readonly startTime: string;\n readonly state: string;\n readonly parents: string[];\n\n readonly workflowName: string;\n readonly clusterName: string;\n\n // will load later\n config: any;\n context: any;\n\n constructor(\n rawName: string,\n workflowName: string,\n clusterName: string,\n startTime: string,\n state: string,\n parents: string[]\n ) {\n this.rawName = rawName;\n // try to reduce the name\n this.name = _.replace(rawName, workflowName + '_', '');\n this.workflowName = workflowName;\n this.clusterName = clusterName;\n this.startTime = startTime;\n this.state = state;\n // try to reduce parent names\n this.parents = _.map(parents, (parent) =>\n _.replace(parent, workflowName + '_', '')\n );\n }\n}\n\nexport class Workflow {\n readonly name: string;\n readonly clusterName: string;\n readonly config: any;\n readonly jobs: Job[];\n readonly context: any;\n readonly json: any;\n\n get isJobQueue(): boolean {\n return (\n this.config &&\n this.config.IsJobQueue &&\n this.config.IsJobQueue.toLowerCase() == 'true'\n );\n }\n\n get state(): string {\n return this.context.STATE || 'NOT STARTED';\n }\n\n constructor(obj: any, clusterName: string) {\n this.json = obj;\n this.name = obj.id;\n this.clusterName = clusterName;\n this.config = obj.WorkflowConfig;\n this.context = obj.WorkflowContext;\n this.jobs = this.parseJobs(obj.Jobs, obj.ParentJobs);\n }\n\n protected parseJobs(list: string[], parents: any): Job[] {\n const result: Job[] = [];\n\n _.forEach(list, (jobName) => {\n result.push(\n new Job(\n jobName,\n this.name,\n this.clusterName,\n _.get(this.context, ['StartTime', jobName]),\n _.get(this.context, ['JOB_STATES', jobName]),\n parents[jobName]\n )\n );\n });\n\n return result;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "rawName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "startTime",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "state",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "parents",
"type": "string[]",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 17,
"jsdoctags": [
{
"name": "rawName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "startTime",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "state",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "parents",
"type": "string[]",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 13,
"modifierKind": [
144
]
},
{
"name": "config",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 16
},
{
"name": "context",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 17
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 6,
"modifierKind": [
144
]
},
{
"name": "parents",
"deprecated": false,
"deprecationMessage": "",
"type": "string[]",
"optional": false,
"description": "",
"line": 10,
"modifierKind": [
144
]
},
{
"name": "rawName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 7,
"modifierKind": [
144
]
},
{
"name": "startTime",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 8,
"modifierKind": [
144
]
},
{
"name": "state",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 9,
"modifierKind": [
144
]
},
{
"name": "workflowName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 12,
"modifierKind": [
144
]
}
],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Node",
"id": "class-Node-9a579c751dc9ff03063f99c75efe170bbfd4d7dd827c0bcb47ce7e303f211f158d9908ef90c5b54f79dfd5d45ff2c7f95357eccbc3453011fcd26d9e597b9a2c",
"file": "src/app/shared/models/node.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n name: string;\n value: string;\n}\n\ninterface ListFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n name: string;\n value: SimpleFieldObject[];\n}\n\ninterface Payload {\n id: string;\n simpleFields?: any;\n listFields?: any;\n mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n id: string;\n simpleFields: SimpleFieldObject[] = [];\n listFields: ListFieldObject[] = [];\n mapFields: MapFieldObject[] = [];\n\n constructor(obj: any) {\n if (obj != null) {\n this.id = obj.id;\n this.simpleFields = this.keyValueToArray(obj.simpleFields);\n\n _.forOwn(obj['listFields'], (v, k) => {\n this.listFields.push(<ListFieldObject>{\n name: k,\n value: _.map(\n v,\n (item) =>\n <SimpleFieldObject>{\n value: item,\n }\n ),\n });\n });\n\n _.forOwn(obj['mapFields'], (v, k) => {\n this.mapFields.push(<MapFieldObject>{\n name: k.trim(),\n value: this.keyValueToArray(v),\n });\n });\n }\n }\n\n public appendSimpleField(name: string, value: string) {\n this.simpleFields.push(<SimpleFieldObject>{\n name,\n value,\n });\n }\n\n public appendMapField(key: string, name: string, value: string) {\n const index = _.findIndex(this.mapFields, { name: key });\n if (index >= 0) {\n this.mapFields[index].value.push(<SimpleFieldObject>{\n name: name.trim(),\n value,\n });\n } else {\n this.mapFields.push(<MapFieldObject>{\n name: key,\n value: [\n <SimpleFieldObject>{\n name: name.trim(),\n value,\n },\n ],\n });\n }\n }\n\n public json(id: string): string {\n const obj: Payload = {\n id,\n };\n\n if (this?.simpleFields.length > 0) {\n obj.simpleFields = {};\n _.forEach(this.simpleFields, (item: SimpleFieldObject) => {\n obj.simpleFields[item.name] = item.value;\n });\n }\n\n if (this?.listFields.length > 0) {\n obj.listFields = {};\n _.forEach(this.listFields, (item: ListFieldObject) => {\n obj.listFields[item.name] = [];\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n obj.listFields[item.name].push(subItem.value);\n });\n });\n }\n\n if (this?.mapFields.length > 0) {\n obj.mapFields = {};\n _.forEach(this.mapFields, (item: MapFieldObject) => {\n obj.mapFields[item.name.trim()] = item.value ? {} : null;\n _.forEach(item.value, (subItem: SimpleFieldObject) => {\n // if the value is a string that contains all digits, parse it to a number\n let parsedValue: string | number = subItem.value;\n if (\n typeof subItem.value === 'string' &&\n /^\\d+$/.test(subItem.value)\n ) {\n parsedValue = Number(subItem.value);\n }\n\n obj.mapFields[item.name.trim()][subItem.name] = parsedValue;\n });\n });\n }\n\n return JSON.stringify(obj);\n }\n\n // Converting raw simpleFields to SimpleFieldObject[]\n private keyValueToArray(obj: Object): SimpleFieldObject[] {\n const result: SimpleFieldObject[] = [];\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n result.push(<SimpleFieldObject>{\n name: k,\n value: obj[k],\n });\n }\n }\n return result;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 30,
"jsdoctags": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "id",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 27
},
{
"name": "listFields",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"type": "ListFieldObject[]",
"optional": false,
"description": "",
"line": 29
},
{
"name": "mapFields",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"type": "MapFieldObject[]",
"optional": false,
"description": "",
"line": 30
},
{
"name": "simpleFields",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"type": "SimpleFieldObject[]",
"optional": false,
"description": "",
"line": 28
}
],
"methods": [
{
"name": "appendMapField",
"args": [
{
"name": "key",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "value",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 66,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "key",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "value",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "appendSimpleField",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "value",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 59,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "value",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "json",
"args": [
{
"name": "id",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 86,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "id",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "keyValueToArray",
"args": [
{
"name": "obj",
"type": "Object",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "SimpleFieldObject[]",
"typeParameters": [],
"line": 131,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
121
],
"jsdoctags": [
{
"name": "obj",
"type": "Object",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Partition",
"id": "class-Partition-c368277d55c3a276a0743ee15fa8b9d77b202780d749de8a9363f93aaa5331e3afffe77b25bc9fff5156b0be913836c0d7e13b89ebf930d53338f495b6b84e94",
"file": "src/app/resource/shared/resource.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\nexport interface IReplica {\n instanceName: string;\n externalView: string;\n idealState: string;\n}\n\nexport class Partition {\n name: string;\n replicas: IReplica[];\n\n get isReady() {\n return !_.some(\n this.replicas,\n (replica) =>\n !replica.externalView || replica.externalView != replica.idealState\n );\n }\n\n constructor(name: string) {\n this.name = name;\n this.replicas = [];\n }\n}\n\nexport class Resource {\n readonly name: string;\n\n // TODO vxu: convert it to an enum in future if necessary\n readonly alive: boolean;\n\n readonly cluster: string;\n\n // meta data\n readonly idealStateMode: string;\n readonly rebalanceMode: string;\n readonly stateModel: string;\n readonly partitionCount: number;\n readonly replicaCount: number;\n\n readonly idealState: any;\n readonly externalView: any;\n\n readonly partitions: Partition[];\n\n get enabled(): boolean {\n // there are two cases meaning enabled both:\n // HELIX_ENABLED: true or no such item in idealState\n return _.get(this.idealState, 'simpleFields.HELIX_ENABLED') != 'false';\n }\n\n get online(): boolean {\n return !_.isEmpty(this.externalView);\n }\n\n constructor(\n cluster: string,\n name: string,\n config: any,\n idealState: any,\n externalView: any\n ) {\n this.cluster = cluster;\n this.name = name;\n\n externalView = externalView || {};\n\n // ignore config for now since config component will fetch itself\n\n this.idealStateMode = idealState.simpleFields.IDEAL_STATE_MODE;\n this.rebalanceMode = idealState.simpleFields.REBALANCE_MODE;\n this.stateModel = idealState.simpleFields.STATE_MODEL_DEF_REF;\n this.partitionCount = +idealState.simpleFields.NUM_PARTITIONS;\n this.replicaCount = +idealState.simpleFields.REPLICAS;\n\n // fetch partition names from externalView.mapFields is (relatively) more stable\n this.partitions = [];\n for (const partitionName in externalView.mapFields) {\n const partition = new Partition(partitionName);\n\n // in FULL_AUTO mode, externalView is more important\n // if preferences list exists, fetch instances from it, else whatever\n if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.listFields[partitionName]\n ) {\n for (const replicaName of idealState.listFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.mapFields[partitionName]\n ) {\n for (const replicaName in idealState.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else {\n for (const replicaName in externalView.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n }\n\n // sort replicas by states\n partition.replicas = _.sortBy(partition.replicas, 'externalView');\n\n this.partitions.push(partition);\n }\n\n this.idealState = idealState;\n this.externalView = externalView;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 19,
"jsdoctags": [
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 10
},
{
"name": "replicas",
"deprecated": false,
"deprecationMessage": "",
"type": "IReplica[]",
"optional": false,
"description": "",
"line": 11
}
],
"methods": [],
"indexSignatures": [],
"accessors": {
"isReady": {
"name": "isReady",
"getSignature": {
"name": "isReady",
"type": "",
"returnType": "",
"line": 13
}
}
},
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Resource",
"id": "class-Resource-c368277d55c3a276a0743ee15fa8b9d77b202780d749de8a9363f93aaa5331e3afffe77b25bc9fff5156b0be913836c0d7e13b89ebf930d53338f495b6b84e94",
"file": "src/app/resource/shared/resource.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\nexport interface IReplica {\n instanceName: string;\n externalView: string;\n idealState: string;\n}\n\nexport class Partition {\n name: string;\n replicas: IReplica[];\n\n get isReady() {\n return !_.some(\n this.replicas,\n (replica) =>\n !replica.externalView || replica.externalView != replica.idealState\n );\n }\n\n constructor(name: string) {\n this.name = name;\n this.replicas = [];\n }\n}\n\nexport class Resource {\n readonly name: string;\n\n // TODO vxu: convert it to an enum in future if necessary\n readonly alive: boolean;\n\n readonly cluster: string;\n\n // meta data\n readonly idealStateMode: string;\n readonly rebalanceMode: string;\n readonly stateModel: string;\n readonly partitionCount: number;\n readonly replicaCount: number;\n\n readonly idealState: any;\n readonly externalView: any;\n\n readonly partitions: Partition[];\n\n get enabled(): boolean {\n // there are two cases meaning enabled both:\n // HELIX_ENABLED: true or no such item in idealState\n return _.get(this.idealState, 'simpleFields.HELIX_ENABLED') != 'false';\n }\n\n get online(): boolean {\n return !_.isEmpty(this.externalView);\n }\n\n constructor(\n cluster: string,\n name: string,\n config: any,\n idealState: any,\n externalView: any\n ) {\n this.cluster = cluster;\n this.name = name;\n\n externalView = externalView || {};\n\n // ignore config for now since config component will fetch itself\n\n this.idealStateMode = idealState.simpleFields.IDEAL_STATE_MODE;\n this.rebalanceMode = idealState.simpleFields.REBALANCE_MODE;\n this.stateModel = idealState.simpleFields.STATE_MODEL_DEF_REF;\n this.partitionCount = +idealState.simpleFields.NUM_PARTITIONS;\n this.replicaCount = +idealState.simpleFields.REPLICAS;\n\n // fetch partition names from externalView.mapFields is (relatively) more stable\n this.partitions = [];\n for (const partitionName in externalView.mapFields) {\n const partition = new Partition(partitionName);\n\n // in FULL_AUTO mode, externalView is more important\n // if preferences list exists, fetch instances from it, else whatever\n if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.listFields[partitionName]\n ) {\n for (const replicaName of idealState.listFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else if (\n this.rebalanceMode != 'FULL_AUTO' &&\n idealState.mapFields[partitionName]\n ) {\n for (const replicaName in idealState.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n } else {\n for (const replicaName in externalView.mapFields[partitionName]) {\n partition.replicas.push(<IReplica>{\n instanceName: replicaName,\n externalView: _.get(externalView, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n idealState: _.get(idealState, [\n 'mapFields',\n partitionName,\n replicaName,\n ]),\n });\n }\n }\n\n // sort replicas by states\n partition.replicas = _.sortBy(partition.replicas, 'externalView');\n\n this.partitions.push(partition);\n }\n\n this.idealState = idealState;\n this.externalView = externalView;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "cluster",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "config",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "idealState",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "externalView",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 55,
"jsdoctags": [
{
"name": "cluster",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "name",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "config",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "idealState",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "externalView",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "alive",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 31,
"modifierKind": [
144
]
},
{
"name": "cluster",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 33,
"modifierKind": [
144
]
},
{
"name": "externalView",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 43,
"modifierKind": [
144
]
},
{
"name": "idealState",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 42,
"modifierKind": [
144
]
},
{
"name": "idealStateMode",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 36,
"modifierKind": [
144
]
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 28,
"modifierKind": [
144
]
},
{
"name": "partitionCount",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 39,
"modifierKind": [
144
]
},
{
"name": "partitions",
"deprecated": false,
"deprecationMessage": "",
"type": "Partition[]",
"optional": false,
"description": "",
"line": 45,
"modifierKind": [
144
]
},
{
"name": "rebalanceMode",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 37,
"modifierKind": [
144
]
},
{
"name": "replicaCount",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 40,
"modifierKind": [
144
]
},
{
"name": "stateModel",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 38,
"modifierKind": [
144
]
}
],
"methods": [],
"indexSignatures": [],
"accessors": {
"enabled": {
"name": "enabled",
"getSignature": {
"name": "enabled",
"type": "boolean",
"returnType": "boolean",
"line": 47
}
},
"online": {
"name": "online",
"getSignature": {
"name": "online",
"type": "boolean",
"returnType": "boolean",
"line": 53
}
}
},
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Settings",
"id": "class-Settings-b55aaabe6a15785d4e56cdc976c94e47844b929bbc89818beb04b38eda6d118dbec8c06aa852817c1dfa0db3d756252b9937568195a42a44e2aab225319b1d20",
"file": "src/app/core/settings.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "export class Settings {\n static readonly tableHeaderHeight = 40;\n static readonly tableRowHeight = 50;\n static readonly helixAPI = '/api/helix';\n static readonly userAPI = '/api/user';\n}\n",
"properties": [
{
"name": "helixAPI",
"defaultValue": "'/api/helix'",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 4,
"modifierKind": [
124,
144
]
},
{
"name": "tableHeaderHeight",
"defaultValue": "40",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 2,
"modifierKind": [
124,
144
]
},
{
"name": "tableRowHeight",
"defaultValue": "50",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 3,
"modifierKind": [
124,
144
]
},
{
"name": "userAPI",
"defaultValue": "'/api/user'",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 5,
"modifierKind": [
124,
144
]
}
],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Task",
"id": "class-Task-dbb6f7398f86a1c9a4e4300cce9fdb5aef458214a868cf6f220016cd48f791cee0f14a555aaae4d2ce8878b40b7c2dda7ad6764dec02e27cdf5fa25348b18875",
"file": "src/app/workflow/shared/workflow.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\nexport class Task {}\n\nexport class Job {\n readonly name: string;\n readonly rawName: string;\n readonly startTime: string;\n readonly state: string;\n readonly parents: string[];\n\n readonly workflowName: string;\n readonly clusterName: string;\n\n // will load later\n config: any;\n context: any;\n\n constructor(\n rawName: string,\n workflowName: string,\n clusterName: string,\n startTime: string,\n state: string,\n parents: string[]\n ) {\n this.rawName = rawName;\n // try to reduce the name\n this.name = _.replace(rawName, workflowName + '_', '');\n this.workflowName = workflowName;\n this.clusterName = clusterName;\n this.startTime = startTime;\n this.state = state;\n // try to reduce parent names\n this.parents = _.map(parents, (parent) =>\n _.replace(parent, workflowName + '_', '')\n );\n }\n}\n\nexport class Workflow {\n readonly name: string;\n readonly clusterName: string;\n readonly config: any;\n readonly jobs: Job[];\n readonly context: any;\n readonly json: any;\n\n get isJobQueue(): boolean {\n return (\n this.config &&\n this.config.IsJobQueue &&\n this.config.IsJobQueue.toLowerCase() == 'true'\n );\n }\n\n get state(): string {\n return this.context.STATE || 'NOT STARTED';\n }\n\n constructor(obj: any, clusterName: string) {\n this.json = obj;\n this.name = obj.id;\n this.clusterName = clusterName;\n this.config = obj.WorkflowConfig;\n this.context = obj.WorkflowContext;\n this.jobs = this.parseJobs(obj.Jobs, obj.ParentJobs);\n }\n\n protected parseJobs(list: string[], parents: any): Job[] {\n const result: Job[] = [];\n\n _.forEach(list, (jobName) => {\n result.push(\n new Job(\n jobName,\n this.name,\n this.clusterName,\n _.get(this.context, ['StartTime', jobName]),\n _.get(this.context, ['JOB_STATES', jobName]),\n parents[jobName]\n )\n );\n });\n\n return result;\n }\n}\n",
"properties": [],
"methods": [],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "UserCtrl",
"id": "class-UserCtrl-b45bb852048757c2ba0bbe29eedfb0b8fcbce439757ca96bf9ba74604a16b9ef7614a93b9ee0d885606f7f461382b2517fa8178afe3489efbffd33b6b6a895ea",
"file": "server/controllers/user.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import { Response, Router } from 'express';\nimport * as LdapClient from 'ldapjs';\nimport * as request from 'request';\nimport { readFileSync } from 'fs';\n\nimport {\n LDAP,\n IDENTITY_TOKEN_SOURCE,\n CUSTOM_IDENTITY_TOKEN_REQUEST_BODY,\n SSL,\n} from '../config';\nimport { HelixRequest, HelixRequestOptions } from './d';\nimport { TOKEN_EXPIRATION_KEY, TOKEN_RESPONSE_KEY } from '../config';\n\nexport class UserCtrl {\n constructor(router: Router) {\n // uncomment the following line to use customized login\n // router.route('/user/authorize').get(this.authorize);\n router.route('/user/login').post(this.login.bind(this));\n router.route('/user/current').get(this.current);\n router.route('/user/can').get(this.can);\n }\n\n //\n // You may rewrite this function to support your own authorization logic.\n // Usually it would be helpful to integrate with 3rd party login.\n // For example:\n //\n /*\n protected authorize(req: HelixRequest, res: Response) {\n const { isAdmin, username, token } = get_auth_state();\n req.session.isAdmin = isAdmin;\n req.session.username = username;\n req.session.identityToken = token;\n res.redirect('/');\n }\n */\n\n protected current(req: HelixRequest, res: Response) {\n res.json(req.session.username || 'Sign In');\n }\n\n //\n // Check the server-side session store,\n // see if this helix-front ExpressJS server\n // already knows that the current user is an admin.\n //\n protected can(req: HelixRequest, res: Response) {\n try {\n return res.json(req.session.isAdmin ? true : false);\n } catch (err) {\n throw new Error(\n `Error from /can logged in admin user session status endpoint: ${err}`\n );\n return false;\n }\n }\n\n protected login(req: HelixRequest, res: Response) {\n const credential = req.body;\n if (!credential.username || !credential.password) {\n res.status(401).json(false);\n return;\n }\n\n // check LDAP\n const ldap = LdapClient.createClient({ url: LDAP.uri });\n ldap.bind(\n credential.username + LDAP.principalSuffix,\n credential.password,\n (err) => {\n if (err) {\n res.status(401).json(false);\n } else {\n // LDAP login success\n const opts = {\n filter:\n '(&(sAMAccountName=' +\n credential.username +\n ')(objectcategory=person))',\n scope: 'sub',\n };\n\n req.session.username = credential.username;\n res.set('Username', credential.username);\n\n ldap.search(LDAP.base, opts, function (err, result) {\n let isInAdminGroup = false;\n result.on('searchEntry', function (entry) {\n if (entry.object && !err) {\n const groups = entry.object['memberOf'];\n for (const group of groups) {\n const groupName = group.split(',', 1)[0].split('=')[1];\n if (groupName == LDAP.adminGroup) {\n isInAdminGroup = true;\n\n //\n // Get an Identity-Token\n // if an IDENTITY_TOKEN_SOURCE\n // is specified in the config\n //\n if (IDENTITY_TOKEN_SOURCE) {\n const body = JSON.stringify({\n username: credential.username,\n password: credential.password,\n ...CUSTOM_IDENTITY_TOKEN_REQUEST_BODY,\n });\n\n const options: HelixRequestOptions = {\n url: IDENTITY_TOKEN_SOURCE,\n json: '',\n body,\n headers: {\n 'Content-Type': 'application/json',\n },\n agentOptions: {\n rejectUnauthorized: false,\n },\n };\n\n if (SSL.cafiles.length > 0) {\n options.agentOptions.ca = readFileSync(SSL.cafiles[0], {\n encoding: 'utf-8',\n });\n }\n\n function callback(error, _res, body) {\n if (error) {\n throw new Error(\n `Failed to get ${IDENTITY_TOKEN_SOURCE} Token: ${error}`\n );\n } else if (body?.error) {\n throw new Error(body?.error);\n } else {\n const parsedBody = JSON.parse(body);\n req.session.isAdmin = isInAdminGroup;\n req.session.identityToken = parsedBody;\n\n const cookieName = 'helixui_identity.token';\n const cookieValue =\n parsedBody.value[TOKEN_RESPONSE_KEY];\n const cookieExpiresDate = new Date(\n parsedBody.value[TOKEN_EXPIRATION_KEY]\n );\n const cookieOptions = {\n expires: cookieExpiresDate,\n };\n res.cookie(cookieName, cookieValue, cookieOptions);\n res.json(isInAdminGroup);\n\n return parsedBody;\n }\n }\n request.post(options, callback);\n } else {\n req.session.isAdmin = isInAdminGroup;\n res.json(isInAdminGroup);\n }\n //\n // END Get an Identity-Token\n //\n }\n }\n } else {\n req.session.isAdmin = isInAdminGroup;\n res.json(isInAdminGroup);\n }\n });\n });\n }\n }\n );\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 15,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [],
"methods": [
{
"name": "can",
"args": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "current",
"args": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 39,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "login",
"args": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 59,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "req",
"type": "HelixRequest",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "res",
"type": "Response",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"indexSignatures": [],
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
},
{
"name": "Workflow",
"id": "class-Workflow-dbb6f7398f86a1c9a4e4300cce9fdb5aef458214a868cf6f220016cd48f791cee0f14a555aaae4d2ce8878b40b7c2dda7ad6764dec02e27cdf5fa25348b18875",
"file": "src/app/workflow/shared/workflow.model.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "class",
"sourceCode": "import * as _ from 'lodash';\n\nexport class Task {}\n\nexport class Job {\n readonly name: string;\n readonly rawName: string;\n readonly startTime: string;\n readonly state: string;\n readonly parents: string[];\n\n readonly workflowName: string;\n readonly clusterName: string;\n\n // will load later\n config: any;\n context: any;\n\n constructor(\n rawName: string,\n workflowName: string,\n clusterName: string,\n startTime: string,\n state: string,\n parents: string[]\n ) {\n this.rawName = rawName;\n // try to reduce the name\n this.name = _.replace(rawName, workflowName + '_', '');\n this.workflowName = workflowName;\n this.clusterName = clusterName;\n this.startTime = startTime;\n this.state = state;\n // try to reduce parent names\n this.parents = _.map(parents, (parent) =>\n _.replace(parent, workflowName + '_', '')\n );\n }\n}\n\nexport class Workflow {\n readonly name: string;\n readonly clusterName: string;\n readonly config: any;\n readonly jobs: Job[];\n readonly context: any;\n readonly json: any;\n\n get isJobQueue(): boolean {\n return (\n this.config &&\n this.config.IsJobQueue &&\n this.config.IsJobQueue.toLowerCase() == 'true'\n );\n }\n\n get state(): string {\n return this.context.STATE || 'NOT STARTED';\n }\n\n constructor(obj: any, clusterName: string) {\n this.json = obj;\n this.name = obj.id;\n this.clusterName = clusterName;\n this.config = obj.WorkflowConfig;\n this.context = obj.WorkflowContext;\n this.jobs = this.parseJobs(obj.Jobs, obj.ParentJobs);\n }\n\n protected parseJobs(list: string[], parents: any): Job[] {\n const result: Job[] = [];\n\n _.forEach(list, (jobName) => {\n result.push(\n new Job(\n jobName,\n this.name,\n this.clusterName,\n _.get(this.context, ['StartTime', jobName]),\n _.get(this.context, ['JOB_STATES', jobName]),\n parents[jobName]\n )\n );\n });\n\n return result;\n }\n}\n",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 59,
"jsdoctags": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "clusterName",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"properties": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 43,
"modifierKind": [
144
]
},
{
"name": "config",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 44,
"modifierKind": [
144
]
},
{
"name": "context",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 46,
"modifierKind": [
144
]
},
{
"name": "jobs",
"deprecated": false,
"deprecationMessage": "",
"type": "Job[]",
"optional": false,
"description": "",
"line": 45,
"modifierKind": [
144
]
},
{
"name": "json",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 47,
"modifierKind": [
144
]
},
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 42,
"modifierKind": [
144
]
}
],
"methods": [
{
"name": "parseJobs",
"args": [
{
"name": "list",
"type": "string[]",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "parents",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "Job[]",
"typeParameters": [],
"line": 70,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "list",
"type": "string[]",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "parents",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"indexSignatures": [],
"accessors": {
"isJobQueue": {
"name": "isJobQueue",
"getSignature": {
"name": "isJobQueue",
"type": "boolean",
"returnType": "boolean",
"line": 49
}
},
"state": {
"name": "state",
"getSignature": {
"name": "state",
"type": "string",
"returnType": "string",
"line": 57
}
}
},
"inputsClass": [],
"outputsClass": [],
"hostBindings": [],
"hostListeners": []
}
],
"directives": [
{
"name": "KeyValuePairDirective",
"id": "directive-KeyValuePairDirective-c86780162af35a2b28f0057e0fa60aebe7d591a8fb7d988e956f1678d95bb90839c20db5a06d32fa01ee0f1b9189a86ec2ab987947c486426254fd7cd9aab6bd",
"file": "src/app/shared/key-value-pairs/key-value-pairs.component.ts",
"type": "directive",
"description": "",
"rawdescription": "\n",
"sourceCode": "import {\n Component,\n ContentChildren,\n Directive,\n Input,\n QueryList,\n} from '@angular/core';\n\nimport * as _ from 'lodash';\n\n// good doc: https://angular.io/docs/ts/latest/api/core/index/ContentChildren-decorator.html\n\n@Directive({ selector: 'hi-key-value-pair' })\nexport class KeyValuePairDirective {\n @Input() name: string;\n @Input() prop: string;\n}\n\n@Component({\n selector: 'hi-key-value-pairs',\n templateUrl: './key-value-pairs.component.html',\n styleUrls: ['./key-value-pairs.component.scss'],\n})\nexport class KeyValuePairsComponent {\n getProp = _.get;\n\n @ContentChildren(KeyValuePairDirective)\n pairs: QueryList<KeyValuePairDirective>;\n\n @Input() obj: any;\n}\n",
"selector": "hi-key-value-pair",
"providers": [],
"inputsClass": [
{
"name": "name",
"deprecated": false,
"deprecationMessage": "",
"line": 15,
"type": "string",
"decorators": []
},
{
"name": "prop",
"deprecated": false,
"deprecationMessage": "",
"line": 16,
"type": "string",
"decorators": []
}
],
"outputsClass": [],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"propertiesClass": [],
"methodsClass": []
}
],
"components": [
{
"name": "AlertDialogComponent",
"id": "component-AlertDialogComponent-120ae8b976cfe686357c36cac4ea86e659092a7c5fc4216c81afd979e52e9086cf7ebed7adae2008b378827809eab2164ffe213211cf43445e49e6a17cb08e77",
"file": "src/app/shared/dialog/alert-dialog/alert-dialog.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-alert-dialog",
"styleUrls": [
"./alert-dialog.component.scss"
],
"styles": [],
"templateUrl": [
"./alert-dialog.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "message",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 11
},
{
"name": "title",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 10
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 15,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'hi-alert-dialog',\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss'],\n})\nexport class AlertDialogComponent implements OnInit {\n title: string;\n message: string;\n\n constructor(@Inject(MAT_DIALOG_DATA) protected data: any) {}\n\n ngOnInit() {\n this.title = (this.data && this.data.title) || 'Alert';\n this.message = (this.data && this.data.message) || 'Something happened.';\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./alert-dialog.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 11,
"jsdoctags": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<h1 mat-dialog-title>{{ title }}</h1>\n<div mat-dialog-content>{{ message }}</div>\n"
},
{
"name": "AppComponent",
"id": "component-AppComponent-ab0f2d07d9bbe2b2304e8801b2049073dc9e2ea892d1bd8ecd75058bd815db3565891a02eab931fffaf1ed578523751bdde179b10f9a18a117fe0215f7b552c6",
"file": "src/app/app.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "UserService"
}
],
"selector": "hi-root",
"styleUrls": [
"./app.component.scss"
],
"styles": [],
"templateUrl": [
"./app.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "currentUser",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 28
},
{
"name": "footerEnabled",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 26
},
{
"name": "headerEnabled",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 27
}
],
"methodsClass": [
{
"name": "login",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 65,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 55,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport {\n Router,\n ActivatedRoute,\n NavigationStart,\n NavigationEnd,\n NavigationCancel,\n NavigationError,\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\n// import { Angulartics2Piwik } from 'angulartics2/piwik';\n\nimport { UserService } from './core/user.service';\nimport { InputDialogComponent } from './shared/dialog/input-dialog/input-dialog.component';\nimport { HelperService } from './shared/helper.service';\n\n@Component({\n selector: 'hi-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n providers: [UserService /*, Angulartics2Piwik */],\n})\nexport class AppComponent implements OnInit {\n headerEnabled = true;\n footerEnabled = true;\n isLoading = true;\n currentUser: any;\n\n constructor(\n // protected angulartics2Piwik: Angulartics2Piwik,\n protected route: ActivatedRoute,\n protected router: Router,\n protected dialog: MatDialog,\n protected service: UserService,\n protected helper: HelperService\n ) {\n router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.isLoading = true;\n }\n if (event instanceof NavigationEnd) {\n this.isLoading = false;\n }\n if (event instanceof NavigationError) {\n this.isLoading = false;\n }\n if (event instanceof NavigationCancel) {\n this.isLoading = false;\n }\n });\n // angulartics2Piwik.startTracking();\n }\n\n ngOnInit() {\n this.currentUser = this.service.getCurrentUser();\n\n this.route.queryParams.subscribe((params) => {\n if (params['embed'] == 'true') {\n this.headerEnabled = this.footerEnabled = false;\n }\n });\n }\n\n login() {\n this.dialog\n .open(InputDialogComponent, {\n data: {\n title: 'Sign In',\n message: 'Please enter your LDAP username and password to continue:',\n values: {\n username: {\n label: 'Username',\n },\n password: {\n label: 'Password',\n type: 'password',\n },\n },\n },\n })\n .afterClosed()\n .subscribe(\n (result) => {\n if (result && result.username.value && result.password.value) {\n this.service\n .login(result.username.value, result.password.value)\n .subscribe(\n (loginResponse) => {\n if (!loginResponse) {\n this.helper.showError(\n `${loginResponse.status}: Either You are not part of helix-admin LDAP group or your password is incorrect.`\n );\n }\n\n this.currentUser = this.service.getCurrentUser();\n },\n (error) => {\n // since rest API simply throws 404 instead of empty config when config is not initialized yet\n // frontend has to treat 404 as normal result\n if (error != 'Not Found') {\n this.helper.showError(error);\n }\n this.isLoading = false;\n }\n );\n }\n },\n (error) => {\n // since rest API simply throws 404 instead of empty config when config is not initialized yet\n // frontend has to treat 404 as normal result\n if (error != 'Not Found') {\n this.helper.showError(error);\n }\n this.isLoading = false;\n }\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".header,\n.footer {\n z-index: 7;\n}\n\n.helix-logo {\n width: 30px;\n height: 30px;\n padding-right: 10px;\n}\n\n.helix-title {\n font-size: 30px;\n text-transform: uppercase;\n}\n\n.mat-progress-bar {\n position: fixed;\n top: 64px;\n z-index: 5;\n\n &.no-header {\n top: 0;\n }\n}\n\n.footer {\n background-color: #f5f5f5;\n height: 50px;\n\n span {\n font-weight: normal;\n font-size: 14px;\n color: #666;\n }\n}\n\n.main-container {\n height: calc(100vh - 64px - 50px);\n overflow-y: scroll;\n\n &.no-header {\n height: 100vh;\n }\n}\n",
"styleUrl": "./app.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "UserService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 28,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "UserService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section class=\"app\" fxLayout=\"column\" fxFill>\n <mat-toolbar\n *ngIf=\"headerEnabled\"\n class=\"header mat-elevation-z7\"\n color=\"primary\"\n >\n <a mat-button routerLink=\"/\">\n <img class=\"helix-logo\" src=\"assets/logo.png\" />\n <span class=\"helix-title\">Helix</span>\n </a>\n <span fxFlex=\"1 1 auto\"></span>\n <a mat-button (click)=\"login()\">\n <mat-icon>person</mat-icon>\n {{ currentUser | async }}\n </a>\n </mat-toolbar>\n <mat-progress-bar\n *ngIf=\"isLoading\"\n mode=\"indeterminate\"\n [ngClass]=\"{ 'no-header': !headerEnabled }\"\n ></mat-progress-bar>\n <section class=\"main-container\" [ngClass]=\"{ 'no-header': !headerEnabled }\">\n <router-outlet></router-outlet>\n </section>\n <section\n *ngIf=\"footerEnabled\"\n class=\"footer mat-elevation-z7\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span>&copy; 2022 Helix. All rights reserved.</span>\n </section>\n</section>\n"
},
{
"name": "ClusterComponent",
"id": "component-ClusterComponent-e9f2bbc82efbf6ad544827bb9017eefc2144024b90a6edc7e849dbb012b4c23ab3565a33c41e0b56dd221f394cc4ad77db936f60091392924fb87e1794676666",
"file": "src/app/cluster/cluster.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-cluster",
"styleUrls": [
"./cluster.component.scss"
],
"styles": [],
"templateUrl": [
"./cluster.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "isNarrowView",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 12
},
{
"name": "sidenav",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 10,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'sidenav', {static: true}"
}
]
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 16,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "toggleSidenav",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 27,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MediaChange, MediaObserver } from '@angular/flex-layout';\n\n@Component({\n selector: 'hi-cluster',\n templateUrl: './cluster.component.html',\n styleUrls: ['./cluster.component.scss'],\n})\nexport class ClusterComponent implements OnInit {\n @ViewChild('sidenav', { static: true }) sidenav;\n\n isNarrowView: boolean;\n\n constructor(protected media: MediaObserver) {}\n\n ngOnInit() {\n // auto adjust side nav only if not embed\n this.isNarrowView = this.media.isActive('xs') || this.media.isActive('sm');\n\n this.media.asObservable().subscribe((change: MediaChange[]) => {\n change.forEach((item) => {\n this.isNarrowView = item.mqAlias === 'xs' || item.mqAlias === 'sm';\n });\n });\n }\n\n toggleSidenav() {\n this.sidenav.opened ? this.sidenav.close() : this.sidenav.open();\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".mat-sidenav {\n width: 25vw;\n min-width: 200px;\n}\n\n.toggle-button {\n position: fixed;\n top: 50%;\n z-index: 3;\n transition: all 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n cursor: pointer;\n\n &.open {\n left: calc(25vw - 20px);\n }\n\n &.close {\n left: -15px;\n }\n}\n",
"styleUrl": "./cluster.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "media",
"type": "MediaObserver",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 12,
"jsdoctags": [
{
"name": "media",
"type": "MediaObserver",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<mat-sidenav-container fxFill>\n <mat-sidenav\n #sidenav\n [mode]=\"isNarrowView ? 'over' : 'side'\"\n [opened]=\"!isNarrowView\"\n [disableClose]=\"!isNarrowView\"\n class=\"mat-elevation-z4\"\n >\n <hi-cluster-list></hi-cluster-list>\n </mat-sidenav>\n <section fxFill>\n <router-outlet></router-outlet>\n </section>\n</mat-sidenav-container>\n<button\n mat-mini-fab\n [ngClass]=\"['toggle-button', sidenav.opened ? 'open' : 'close']\"\n color=\"\"\n (click)=\"toggleSidenav()\"\n>\n <mat-icon>chevron_{{ sidenav.opened ? 'left' : 'right' }}</mat-icon>\n</button>\n"
},
{
"name": "ClusterDetailComponent",
"id": "component-ClusterDetailComponent-c113526e36f3c537ef54d6e94ae2437e25a4350adba3e1311f167d0913656b2da2fe391edee3eb40924bf4ebd85424f8e595f44db590d0750c5c7bc5d5d32dcb",
"file": "src/app/cluster/cluster-detail/cluster-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "InstanceService"
}
],
"selector": "hi-cluster-detail",
"styleUrls": [
"./cluster-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./cluster-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 31
},
{
"name": "cluster",
"deprecated": false,
"deprecationMessage": "",
"type": "Cluster",
"optional": false,
"description": "",
"line": 30
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 29
},
{
"name": "isLoading",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 28
},
{
"name": "tabLinks",
"defaultValue": "[\n { label: 'Dashboard (beta)', link: 'dashboard' },\n { label: 'Resources', link: 'resources' },\n { label: 'Workflows', link: 'workflows' },\n { label: 'Instances', link: 'instances' },\n { label: 'Configuration', link: 'configs' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 20,
"modifierKind": [
144
]
}
],
"methodsClass": [
{
"name": "activateCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 122,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "addInstance",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 59,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "deleteCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 197,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "disableCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 115,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "disableMaintenanceMode",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 190,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enableCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 108,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enableMaintenanceMode",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 163,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "loadCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 50,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 42,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { map } from 'rxjs/operators';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Cluster } from '../shared/cluster.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ClusterService } from '../shared/cluster.service';\nimport { InstanceService } from '../../instance/shared/instance.service';\nimport { AlertDialogComponent } from '../../shared/dialog/alert-dialog/alert-dialog.component';\nimport { InputDialogComponent } from '../../shared/dialog/input-dialog/input-dialog.component';\n\n@Component({\n selector: 'hi-cluster-detail',\n templateUrl: './cluster-detail.component.html',\n styleUrls: ['./cluster-detail.component.scss'],\n providers: [InstanceService],\n})\nexport class ClusterDetailComponent implements OnInit {\n readonly tabLinks = [\n { label: 'Dashboard (beta)', link: 'dashboard' },\n { label: 'Resources', link: 'resources' },\n { label: 'Workflows', link: 'workflows' },\n { label: 'Instances', link: 'instances' },\n { label: 'Configuration', link: 'configs' },\n ];\n\n isLoading = false;\n clusterName: string; // for better UX needs\n cluster: Cluster;\n can = false;\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected dialog: MatDialog,\n protected helperService: HelperService,\n protected clusterService: ClusterService,\n protected instanceService: InstanceService\n ) {}\n\n ngOnInit() {\n this.clusterService.can().subscribe((data) => (this.can = data));\n this.route.params.pipe(map((p) => p.name)).subscribe((name) => {\n this.clusterName = name;\n this.loadCluster();\n });\n }\n\n protected loadCluster() {\n this.isLoading = true;\n this.clusterService.get(this.clusterName).subscribe(\n (data) => (this.cluster = data),\n (error) => this.helperService.showError(error),\n () => (this.isLoading = false)\n );\n }\n\n addInstance() {\n this.dialog\n .open(InputDialogComponent, {\n data: {\n title: 'Add a new Instance',\n message: 'Please enter the following information to continue:',\n values: {\n host: {\n label: 'Hostname',\n },\n port: {\n label: 'Port',\n },\n enabled: {\n label: 'Enabled',\n type: 'boolean',\n },\n },\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result) {\n this.instanceService\n .create(\n this.cluster.name,\n result.host.value,\n result.port.value,\n result.enabled.value\n )\n .subscribe(\n (data) => {\n this.helperService.showSnackBar('New Instance added!');\n // temporarily navigate back to instance view to refresh\n // will fix this using ngrx/store\n this.router.navigate(['workflows'], { relativeTo: this.route });\n setTimeout(() => {\n this.router.navigate(['instances'], {\n relativeTo: this.route,\n });\n }, 100);\n },\n (error) => this.helperService.showError(error),\n () => {}\n );\n }\n });\n }\n\n enableCluster() {\n this.clusterService.enable(this.clusterName).subscribe(\n () => this.loadCluster(),\n (error) => this.helperService.showError(error)\n );\n }\n\n disableCluster() {\n this.clusterService.disable(this.clusterName).subscribe(\n () => this.loadCluster(),\n (error) => this.helperService.showError(error)\n );\n }\n\n activateCluster() {\n this.dialog\n .open(InputDialogComponent, {\n data: {\n title: 'Activate this Cluster',\n message:\n 'To link this cluster to a Helix super cluster (controller), please enter the super cluster name:',\n values: {\n name: {\n label: 'super cluster name',\n },\n },\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result && result.name.value) {\n this.clusterService\n .activate(this.clusterName, result.name.value)\n .subscribe(\n () => {\n // since this action may delay a little bit, to prevent re-activation,\n // use an alert dialog to reload the data later\n this.dialog\n .open(AlertDialogComponent, {\n data: {\n title: 'Cluster Activated',\n message: `Cluster '${this.clusterName}' is linked to super cluster '${result.name.value}'.`,\n },\n })\n .afterClosed()\n .subscribe(() => {\n this.loadCluster();\n });\n },\n (error) => this.helperService.showError(error)\n );\n }\n });\n }\n\n enableMaintenanceMode() {\n this.dialog\n .open(InputDialogComponent, {\n data: {\n title: 'Enable maintenance mode',\n message:\n 'What reason do you want to use to put the cluster in maintenance mode?',\n values: {\n reason: {\n label: 'reason',\n },\n },\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result && result.reason.value) {\n this.clusterService\n .enableMaintenanceMode(this.clusterName, result.reason.value)\n .subscribe(\n () => this.loadCluster(),\n (error) => this.helperService.showError(error)\n );\n }\n });\n }\n\n disableMaintenanceMode() {\n this.clusterService.disableMaintenanceMode(this.clusterName).subscribe(\n () => this.loadCluster(),\n (error) => this.helperService.showError(error)\n );\n }\n\n deleteCluster() {\n this.helperService\n .showConfirmation(\n 'Are you sure you want to delete this cluster? This cannot be undone.',\n 'Confirm Cluster Deletion',\n `Delete Cluster ${this.clusterName}`\n )\n .then((result) => {\n if (result) {\n this.clusterService.remove(this.cluster.name).subscribe((data) => {\n this.helperService.showSnackBar(\n `Cluster ${this.clusterName} deleted`\n );\n // FIXME: should reload cluster list as well\n this.router.navigate(['..'], { relativeTo: this.route });\n });\n }\n });\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".mat-spinner {\n margin: 0 20px;\n}\n\n.mat-toolbar h6 {\n font-size: 14px;\n}\n",
"styleUrl": "./cluster-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helperService",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceService",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 31,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helperService",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceService",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section *ngIf=\"clusterName\" class=\"cluster-detail\" fxLayout=\"column\" fxFill>\n <mat-toolbar class=\"mat-elevation-z1\" fxFlex=\"none\">\n <mat-toolbar-row>\n <hi-detail-header [cluster]=\"clusterName\"></hi-detail-header>\n <hi-disabled-label\n *ngIf=\"!cluster?.enabled\"\n text=\"DISABLED\"\n ></hi-disabled-label>\n <hi-disabled-label\n *ngIf=\"cluster?.inMaintenance\"\n text=\"In Maintenance Mode\"\n ></hi-disabled-label>\n </mat-toolbar-row>\n <mat-toolbar-row class=\"information\">\n <mat-spinner *ngIf=\"isLoading\" diameter=\"30\"></mat-spinner>\n <h6 *ngIf=\"!isLoading\">\n Controller:\n <a mat-button color=\"accent\" routerLink=\"controller\">{{\n cluster.controller\n }}</a>\n </h6>\n <span fxFlex=\"1 1 auto\"></span>\n <button mat-mini-fab *ngIf=\"can\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>menu</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"cluster?.controller === 'No Lead Controller!'\"\n (click)=\"activateCluster()\"\n >\n <mat-icon>settings_input_antenna</mat-icon>\n <span>Activate this Cluster</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"!cluster?.inMaintenance\"\n (click)=\"enableMaintenanceMode()\"\n >\n <mat-icon>music_off</mat-icon>\n <span>Enable maintenance mode</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"cluster?.inMaintenance\"\n (click)=\"disableMaintenanceMode()\"\n >\n <mat-icon>music_note</mat-icon>\n <span>Disable maintenance mode</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"cluster?.enabled\"\n (click)=\"disableCluster()\"\n >\n <mat-icon>not_interested</mat-icon>\n <span>Disable this Cluster</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"!cluster?.enabled\"\n (click)=\"enableCluster()\"\n >\n <mat-icon>play_circle_outline</mat-icon>\n <span>Enable this Cluster</span>\n </button>\n <button mat-menu-item *ngIf=\"false\" (click)=\"addResource()\">\n <mat-icon>note_add</mat-icon>\n <span>Add a Resource</span>\n </button>\n <button mat-menu-item (click)=\"addInstance()\">\n <mat-icon>add_circle</mat-icon>\n <span>Add an Instance</span>\n </button>\n <button mat-menu-item (click)=\"deleteCluster()\">\n <mat-icon>delete</mat-icon>\n <span>DELETE this Cluster</span>\n </button>\n </mat-menu>\n </mat-toolbar-row>\n </mat-toolbar>\n <nav mat-tab-nav-bar>\n <a\n mat-tab-link\n *ngFor=\"let tabLink of tabLinks\"\n [routerLink]=\"tabLink.link\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n >\n {{ tabLink.label }}\n </a>\n </nav>\n <section fxFlex>\n <router-outlet></router-outlet>\n </section>\n</section>\n"
},
{
"name": "ClusterListComponent",
"id": "component-ClusterListComponent-96a618ec59acde620249bdda1b57c2a61fefeecb19b3c9eef5f046dcca7032345cd8563639660af1a5283c3a033f654dfd4689e35ef439a065190e5e8f9bb0a4",
"file": "src/app/cluster/cluster-list/cluster-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-cluster-list",
"styleUrls": [
"./cluster-list.component.scss"
],
"styles": [],
"templateUrl": [
"./cluster-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 21
},
{
"name": "clusters",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"type": "Cluster[]",
"optional": false,
"description": "",
"line": 17
},
{
"name": "errorMessage",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 18
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 19
},
{
"name": "service",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 22
}
],
"methodsClass": [
{
"name": "createCluster",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 59,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "loadClusters",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 38,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 31,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "showErrorMessage",
"args": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "error",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\n\nimport { ClusterService } from '../shared/cluster.service';\nimport { Cluster } from '../shared/cluster.model';\nimport { AlertDialogComponent } from '../../shared/dialog/alert-dialog/alert-dialog.component';\nimport { InputDialogComponent } from '../../shared/dialog/input-dialog/input-dialog.component';\n\n@Component({\n selector: 'hi-cluster-list',\n templateUrl: './cluster-list.component.html',\n styleUrls: ['./cluster-list.component.scss'],\n})\nexport class ClusterListComponent implements OnInit {\n clusters: Cluster[] = [];\n errorMessage = '';\n isLoading = true;\n // is the currrent user logged in? If true, then yes.\n can = false;\n service = '';\n\n constructor(\n protected clusterService: ClusterService,\n protected dialog: MatDialog,\n protected snackBar: MatSnackBar,\n protected router: Router\n ) {}\n\n ngOnInit() {\n this.loadClusters();\n // check if the current user is logged in\n this.clusterService.can().subscribe((data) => (this.can = data));\n this.service = this.router.url.split('/')[1];\n }\n\n loadClusters() {\n this.clusterService.getAll().subscribe(\n /* happy path */ (clusters) => (this.clusters = clusters),\n /* error path */ (error) => this.showErrorMessage(error),\n /* onComplete */ () => (this.isLoading = false)\n );\n // check if the current user is logged in again\n this.clusterService.can().subscribe((data) => (this.can = data));\n }\n\n showErrorMessage(error: any) {\n this.errorMessage = error;\n this.isLoading = false;\n this.dialog.open(AlertDialogComponent, {\n data: {\n title: 'Error',\n message: this.errorMessage,\n },\n });\n }\n\n createCluster() {\n const dialogRef = this.dialog.open(InputDialogComponent, {\n data: {\n title: 'Create a cluster',\n message: 'Please enter the following information to continue:',\n values: {\n name: {\n label: 'new cluster name',\n },\n },\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result && result.name && result.name.value) {\n this.isLoading = true;\n this.clusterService.create(result.name.value).subscribe((data) => {\n this.snackBar.open('Cluster created!', 'OK', {\n duration: 2000,\n });\n this.dialog.open(AlertDialogComponent, {\n width: '600px',\n data: {\n title: \"What's Next\",\n message:\n 'New cluster is created yet not activated. When you are ready to activate this cluster,' +\n ' please select \"Activate this Cluster\" menu in the cluster operations to continue.',\n },\n });\n this.loadClusters();\n });\n }\n });\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.mat-nav-list {\n display: flex;\n flex-direction: column;\n}\n\n.cluster-list-button-group {\n display: flex;\n justify-content: space-between;\n margin-right: 1rem;\n}\n\n.back-to-index-button {\n align-self: flex-start;\n}\n\n.add-cluster-button {\n align-self: flex-end;\n}\n\n.mat-spinner {\n margin: 20px;\n}\n\n.cluster-list-item-selected h4 {\n font-weight: 500;\n color: mat.get-color-from-palette($hi-primary);\n}\n\n.error-message {\n padding: 10px;\n}\n\n.empty {\n font-size: 14px;\n // font-style: italic;\n padding: 10px;\n}\n",
"styleUrl": "./cluster-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "snackBar",
"type": "MatSnackBar",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 22,
"jsdoctags": [
{
"name": "clusterService",
"type": "ClusterService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "snackBar",
"type": "MatSnackBar",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section class=\"cluster-list\">\n <section *ngIf=\"isLoading\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-spinner> Loading all clusters ... </mat-spinner>\n </section>\n <mat-nav-list *ngIf=\"!isLoading && !errorMessage\">\n <div class=\"cluster-list-button-group\">\n <button class=\"back-to-index-button\" mat-button routerLink=\"/\">\n <mat-icon>arrow_back</mat-icon> Back to Index\n </button>\n <button mat-mini-fab *ngIf=\"can\" (click)=\"createCluster()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n <h3 mat-subheader>Clusters in {{ service }} ({{ clusters.length }})</h3>\n <a\n *ngFor=\"let cluster of clusters\"\n mat-list-item\n [routerLink]=\"[cluster.name]\"\n routerLinkActive=\"cluster-list-item-selected\"\n >\n <mat-icon mat-list-icon>blur_circular</mat-icon>\n <h4 mat-line>{{ cluster.name }}</h4>\n </a>\n <div *ngIf=\"clusters.length == 0\" class=\"empty\">\n There's no cluster here.\n <a mat-button *ngIf=\"can\" (click)=\"createCluster()\">Create one?</a>\n </div>\n </mat-nav-list>\n <section class=\"error-message\" *ngIf=\"errorMessage\">\n {{ errorMessage }}\n </section>\n</section>\n"
},
{
"name": "ConfigDetailComponent",
"id": "component-ConfigDetailComponent-7003bbd62f0ef79f82f39acfb7213849eccc83bba78d83d27eafa94f0f97acb87165b0e3e65da443932cd72d547b9f6531aef4146ac35ee85ba0d11b11adf77f",
"file": "src/app/configuration/config-detail/config-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "ConfigurationService"
}
],
"selector": "hi-config-detail",
"styleUrls": [
"./config-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./config-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 19
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 16
},
{
"name": "instanceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 17
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 14
},
{
"name": "obj",
"defaultValue": "{}",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 15
},
{
"name": "resourceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 18
}
],
"methodsClass": [
{
"name": "deleteConfig",
"args": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 107,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "loadConfig",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 41,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 27,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "updateConfig",
"args": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 75,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ConfigurationService } from '../shared/configuration.service';\nimport { HelperService } from '../../shared/helper.service';\n\n@Component({\n selector: 'hi-config-detail',\n templateUrl: './config-detail.component.html',\n styleUrls: ['./config-detail.component.scss'],\n providers: [ConfigurationService],\n})\nexport class ConfigDetailComponent implements OnInit {\n isLoading = true;\n obj: any = {};\n clusterName: string;\n instanceName: string;\n resourceName: string;\n can = false;\n\n constructor(\n protected route: ActivatedRoute,\n protected service: ConfigurationService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n if (this.route.parent) {\n this.clusterName =\n this.route.parent.snapshot.params.name ||\n this.route.parent.snapshot.params.cluster_name;\n this.instanceName = this.route.parent.snapshot.params.instance_name;\n this.resourceName = this.route.parent.snapshot.params.resource_name;\n }\n\n this.loadConfig();\n\n this.service.can().subscribe((data) => (this.can = data));\n }\n\n loadConfig() {\n let observer: any;\n\n if (this.clusterName && this.instanceName) {\n observer = this.service.getInstanceConfig(\n this.clusterName,\n this.instanceName\n );\n } else if (this.clusterName && this.resourceName) {\n observer = this.service.getResourceConfig(\n this.clusterName,\n this.resourceName\n );\n } else {\n observer = this.service.getClusterConfig(this.clusterName);\n }\n\n if (observer) {\n this.isLoading = true;\n observer.subscribe(\n (config) => (this.obj = config),\n (error) => {\n // since rest API simply throws 404 instead of empty config when config is not initialized yet\n // frontend has to treat 404 as normal result\n if (error != 'Not Found') {\n this.helper.showError(error);\n }\n this.isLoading = false;\n },\n () => (this.isLoading = false)\n );\n }\n }\n\n updateConfig(value: any) {\n let observer: any;\n\n if (this.clusterName && this.instanceName) {\n observer = this.service.setInstanceConfig(\n this.clusterName,\n this.instanceName,\n value\n );\n } else if (this.clusterName && this.resourceName) {\n observer = this.service.setResourceConfig(\n this.clusterName,\n this.resourceName,\n value\n );\n } else {\n observer = this.service.setClusterConfig(this.clusterName, value);\n }\n\n if (observer) {\n this.isLoading = true;\n observer.subscribe(\n () => {\n this.helper.showSnackBar('Configuration updated!');\n this.loadConfig();\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n }\n\n deleteConfig(value: any) {\n let observer: any;\n\n if (this.clusterName && this.instanceName) {\n observer = this.service.deleteInstanceConfig(\n this.clusterName,\n this.instanceName,\n value\n );\n } else if (this.clusterName && this.resourceName) {\n observer = this.service.deleteResourceConfig(\n this.clusterName,\n this.resourceName,\n value\n );\n } else {\n observer = this.service.deleteClusterConfig(this.clusterName, value);\n }\n\n if (observer) {\n this.isLoading = true;\n observer.subscribe(\n () => {\n this.helper.showSnackBar('Configuration deleted!');\n this.loadConfig();\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./config-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ConfigurationService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 19,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ConfigurationService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <hi-node-viewer\n [loadingIndicator]=\"isLoading\"\n [obj]=\"obj\"\n [unlockable]=\"can && instanceName == null\"\n (update)=\"updateConfig($event)\"\n (create)=\"updateConfig($event)\"\n (delete)=\"deleteConfig($event)\"\n >\n </hi-node-viewer>\n</section>\n"
},
{
"name": "ConfirmDialogComponent",
"id": "component-ConfirmDialogComponent-48a0f9fe0e37f8bd5340e5f536cbf9375ac0a8e58bf2616bd82f418ff626eb2029bd3fe6d9fabfdeaad6711e34696274e4c72561d29e3a704f702d1c701bbd3d",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-confirm-dialog",
"styleUrls": [
"./confirm-dialog.component.scss"
],
"styles": [],
"templateUrl": [
"./confirm-dialog.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "confirmButtonText",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 13
},
{
"name": "message",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 12
},
{
"name": "title",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 11
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onCancel",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 32,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onConfirm",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 28,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'hi-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss'],\n})\nexport class ConfirmDialogComponent implements OnInit {\n title: string;\n message: string;\n confirmButtonText: string;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) protected data: any,\n protected dialogRef: MatDialogRef<ConfirmDialogComponent>\n ) {}\n\n ngOnInit() {\n this.title = (this.data && this.data.title) || 'Confirmation';\n this.message =\n (this.data && this.data.message) || 'Are you sure about this?';\n this.confirmButtonText =\n (this.data && this.data.confirmButtonText) || 'Continue';\n }\n\n onConfirm() {\n this.dialogRef.close(true);\n }\n\n onCancel() {\n this.dialogRef.close();\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./confirm-dialog.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialogRef",
"type": "MatDialogRef<ConfirmDialogComponent>",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 13,
"jsdoctags": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialogRef",
"type": "MatDialogRef<ConfirmDialogComponent>",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<form (ngSubmit)=\"onCancel()\" #inputForm=\"ngForm\">\n <h1 mat-dialog-title>{{ title }}</h1>\n <div mat-dialog-content>\n <section>\n {{ message }}\n </section>\n </div>\n <div mat-dialog-actions>\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!inputForm.form.valid\"\n >\n Cancel\n </button>\n <button mat-button type=\"button\" (click)=\"onConfirm()\">\n {{ confirmButtonText }}\n </button>\n </div>\n</form>\n"
},
{
"name": "ConfirmDialogTestComponent",
"id": "component-ConfirmDialogTestComponent-de0078ca900ade63a7a114ed07a1a6b39665b99125c58043d2bcc3ed2e672f8d85618a960a9470e6d371d97d40a5466bb0f5c438b368dd7ff97224534899aa06",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-confirm-dialog-test",
"styleUrls": [
"./confirm-dialog.component.scss"
],
"styles": [],
"template": "<button mat-flat-button (click)=\"openDialog()\"> Open Dialog\n </button>",
"templateUrl": [],
"viewProviders": [],
"inputsClass": [
{
"name": "data",
"deprecated": false,
"deprecationMessage": "",
"line": 17,
"type": "any",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "dialog",
"deprecated": false,
"deprecationMessage": "",
"type": "MatDialog",
"optional": false,
"description": "",
"line": 19,
"modifierKind": [
123
]
}
],
"methodsClass": [
{
"name": "openDialog",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 21,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MaterialModule } from 'app/shared/material.module';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n// Wrapper component for testing approach recommended in this answer:\n// https://stackoverflow.com/a/63953851/1732222\n@Component({\n selector: 'hi-confirm-dialog-test',\n template: ` <button mat-flat-button (click)=\"openDialog()\">\n Open Dialog\n </button>`,\n styleUrls: ['./confirm-dialog.component.scss'],\n})\nexport class ConfirmDialogTestComponent {\n @Input() data: any;\n\n constructor(public dialog: MatDialog) {}\n\n public openDialog(): void {\n this.dialog.open(ConfirmDialogComponent, {\n data: this.data,\n });\n }\n}\n\nexport default () => ({\n moduleMetadata: {\n _imports: [BrowserAnimationsModule, MatDialogModule, MaterialModule],\n get imports() {\n return this._imports;\n },\n set imports(value) {\n this._imports = value;\n },\n declarations: [ConfirmDialogTestComponent],\n },\n component: ConfirmDialogTestComponent,\n});\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./confirm-dialog.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 17,
"jsdoctags": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
},
{
"name": "ControllerDetailComponent",
"id": "component-ControllerDetailComponent-e04da49e353da895bbc10a6814958edca93cdc4225413ae00c0507cee7a22a2db8f081d67ca1d1dcf561488972a8549300542fa6634e11a3208cf91f96494afe",
"file": "src/app/controller/controller-detail/controller-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "ControllerService",
"type": "controller"
}
],
"selector": "hi-controller-detail",
"styleUrls": [
"./controller-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./controller-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 14
},
{
"name": "controller",
"deprecated": false,
"deprecationMessage": "",
"type": "Controller",
"optional": false,
"description": "",
"line": 15
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 16
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 23,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Controller } from '../shared/controller.model';\nimport { ControllerService } from '../shared/controller.service';\n\n@Component({\n selector: 'hi-controller-detail',\n templateUrl: './controller-detail.component.html',\n styleUrls: ['./controller-detail.component.scss'],\n providers: [ControllerService],\n})\nexport class ControllerDetailComponent implements OnInit {\n clusterName: string;\n controller: Controller;\n isLoading = true;\n\n constructor(\n private route: ActivatedRoute,\n private service: ControllerService\n ) {}\n\n ngOnInit() {\n this.clusterName = this.route.snapshot.params['cluster_name'];\n this.service.get(this.clusterName).subscribe(\n (controller) => (this.controller = controller),\n (error) => {},\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".information {\n .mat-spinner {\n margin: 0 20px;\n }\n}\n",
"styleUrl": "./controller-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ControllerService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 16,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ControllerService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <mat-toolbar class=\"mat-elevation-z1\">\n <mat-toolbar-row>\n <hi-detail-header\n [cluster]=\"clusterName\"\n [controller]=\"controller?.name\"\n ></hi-detail-header>\n </mat-toolbar-row>\n <mat-toolbar-row class=\"information\" fxLayout=\"row\">\n <a mat-mini-fab routerLink=\"../\"><mat-icon>arrow_back</mat-icon></a>\n <mat-spinner *ngIf=\"isLoading\" diameter=\"30\"></mat-spinner>\n <hi-key-value-pairs *ngIf=\"!isLoading\" [obj]=\"controller\">\n <hi-key-value-pair\n name=\"Instance\"\n prop=\"liveInstance\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Session ID\"\n prop=\"sessionId\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Helix Version\"\n prop=\"helixVersion\"\n ></hi-key-value-pair>\n </hi-key-value-pairs>\n </mat-toolbar-row>\n </mat-toolbar>\n <nav mat-tab-nav-bar>\n <a\n mat-tab-link\n routerLink=\"history\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n >\n History\n </a>\n </nav>\n <router-outlet></router-outlet>\n</section>\n"
},
{
"name": "DashboardComponent",
"id": "component-DashboardComponent-1d72e983668ec82137e6e518e8b8e25d91dd500524110ca374faec5f54a349b61b412de59d99fd1dc49accec7be89ff324ebb2629c878b5af26b702b6e11b0b3",
"file": "src/app/dashboard/dashboard.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "ResourceService"
},
{
"name": "InstanceService"
}
],
"selector": "hi-dashboard",
"styleUrls": [
"./dashboard.component.scss"
],
"styles": [],
"templateUrl": [
"./dashboard.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 32,
"modifierKind": [
123
]
},
{
"name": "edges",
"deprecated": false,
"deprecationMessage": "",
"type": "Edge[]",
"optional": false,
"description": "",
"line": 30,
"modifierKind": [
123
]
},
{
"name": "instanceToId",
"defaultValue": "{}",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 35,
"modifierKind": [
123
]
},
{
"name": "isLoading",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 33,
"modifierKind": [
123
]
},
{
"name": "nodes",
"deprecated": false,
"deprecationMessage": "",
"type": "Node[]",
"optional": false,
"description": "",
"line": 29,
"modifierKind": [
123
]
},
{
"name": "resourceToId",
"defaultValue": "{}",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 34,
"modifierKind": [
123
]
},
{
"name": "selectedInstance",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 37,
"modifierKind": [
123
]
},
{
"name": "selectedResource",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 36,
"modifierKind": [
123
]
},
{
"name": "updateInterval",
"defaultValue": "3000",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 39,
"modifierKind": [
123
]
},
{
"name": "updateSubscription",
"deprecated": false,
"deprecationMessage": "",
"type": "Subscription",
"optional": false,
"description": "",
"line": 38,
"modifierKind": [
123
]
},
{
"name": "visNetwork",
"defaultValue": "'cluster-dashboard'",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 26,
"modifierKind": [
123
]
},
{
"name": "visNetworkData",
"deprecated": false,
"deprecationMessage": "",
"type": "Data",
"optional": false,
"description": "",
"line": 27,
"modifierKind": [
123
]
},
{
"name": "visNetworkOptions",
"deprecated": false,
"deprecationMessage": "",
"type": "Options",
"optional": false,
"description": "",
"line": 28,
"modifierKind": [
123
]
}
],
"methodsClass": [
{
"name": "fetchResources",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 162,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "initDashboard",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 129,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "networkInitialized",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 50,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngAfterViewInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 149,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnDestroy",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 153,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 81,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onNodeSelected",
"args": [
{
"name": "id",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 224,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
],
"jsdoctags": [
{
"name": "id",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "updateResources",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 209,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import {\n Component,\n ElementRef,\n OnInit,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport _ from 'lodash';\nimport { forEach as lodashForEach } from 'lodash';\nimport { Data, Edge, Node, Options, VisNetworkService } from 'ngx-vis';\n\nimport { ResourceService } from '../resource/shared/resource.service';\nimport { InstanceService } from '../instance/shared/instance.service';\nimport { HelperService } from '../shared/helper.service';\n@Component({\n selector: 'hi-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n providers: [ResourceService, InstanceService],\n})\nexport class DashboardComponent implements OnInit, AfterViewInit, OnDestroy {\n public visNetwork = 'cluster-dashboard';\n public visNetworkData: Data;\n public visNetworkOptions: Options;\n public nodes: Node[];\n public edges: Edge[];\n\n public clusterName: string;\n public isLoading = false;\n public resourceToId = {};\n public instanceToId = {};\n public selectedResource: any;\n public selectedInstance: any;\n public updateSubscription: Subscription;\n public updateInterval = 3000;\n\n public constructor(\n private el: ElementRef,\n private route: ActivatedRoute,\n protected visNetworkService: VisNetworkService,\n protected resourceService: ResourceService,\n protected instanceService: InstanceService,\n protected helper: HelperService\n ) {}\n\n networkInitialized() {\n this.visNetworkService.on(this.visNetwork, 'click');\n this.visNetworkService.on(this.visNetwork, 'zoom');\n\n this.visNetworkService.click.subscribe((eventData: any[]) => {\n if (eventData[0] === this.visNetwork) {\n // clear the edges\n this.visNetworkData.edges = [];\n this.selectedResource = null;\n this.selectedInstance = null;\n\n //\n if (eventData[1].nodes.length) {\n const id = eventData[1].nodes[0];\n this.onNodeSelected(id);\n }\n }\n });\n\n this.visNetworkService.zoom.subscribe((eventData: any) => {\n if (eventData[0] === this.visNetwork) {\n const scale = eventData[1].scale;\n if (scale == 10) {\n // too big\n } else if (scale < 0.3) {\n // small enough\n }\n }\n });\n }\n\n ngOnInit() {\n this.nodes = [];\n this.edges = [];\n this.visNetworkData = { nodes: this.nodes, edges: this.edges };\n this.visNetworkOptions = {\n interaction: {\n navigationButtons: true,\n keyboard: true,\n },\n layout: {\n // layout will be the same every time the nodes are settled\n randomSeed: 7,\n },\n physics: {\n // default is barnesHut\n solver: 'forceAtlas2Based',\n forceAtlas2Based: {\n // default: -50\n gravitationalConstant: -30,\n // default: 0\n // avoidOverlap: 0.3\n },\n },\n groups: {\n resource: {\n color: '#7FCAC3',\n shape: 'ellipse',\n widthConstraint: { maximum: 140 },\n },\n instance: {\n color: '#90CAF9',\n shape: 'box',\n widthConstraint: { maximum: 140 },\n },\n instance_bad: {\n color: '#CA7F86',\n shape: 'box',\n widthConstraint: { maximum: 140 },\n },\n partition: {\n color: '#98D4B1',\n shape: 'ellipse',\n widthConstraint: { maximum: 140 },\n },\n },\n };\n }\n\n initDashboard() {\n // resize container according to the parent\n const width = this.el.nativeElement.offsetWidth;\n const height = this.el.nativeElement.offsetHeight - 36;\n const dashboardDom = this.el.nativeElement.getElementsByClassName(\n this.visNetwork\n )[0];\n dashboardDom.style.width = `${width}px`;\n dashboardDom.style.height = `${height}px`;\n\n // load data\n if (this.route && this.route.parent) {\n this.route.parent.params.pipe(map((p) => p.name)).subscribe((name) => {\n this.clusterName = name;\n this.fetchResources();\n // this.updateResources();\n });\n }\n }\n\n ngAfterViewInit() {\n setTimeout((_) => this.initDashboard());\n }\n\n ngOnDestroy(): void {\n if (this.updateSubscription) {\n this.updateSubscription.unsubscribe();\n }\n\n this.visNetworkService.off(this.visNetwork, 'zoom');\n this.visNetworkService.off(this.visNetwork, 'click');\n }\n\n protected fetchResources() {\n this.isLoading = true;\n\n this.resourceService.getAll(this.clusterName).subscribe(\n (result) => {\n lodashForEach(result, (resource) => {\n const lastId = this.nodes.length;\n const newId = this.nodes.length + 1;\n this.resourceToId[resource.name] = newId;\n (this.visNetworkData.nodes as Node[])[\n this.visNetworkData.nodes.length\n ] = {\n id: newId,\n label: resource.name,\n group: 'resource',\n title: JSON.stringify(resource),\n };\n });\n\n this.visNetworkService.fit(this.visNetwork);\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n\n this.instanceService.getAll(this.clusterName).subscribe(\n (result) => {\n lodashForEach(result, (instance) => {\n const newId = this.visNetworkData.nodes.length + 1;\n this.instanceToId[instance.name] = newId;\n (this.visNetworkData.nodes as Node[])[\n this.visNetworkData.nodes.length\n ] = {\n id: newId,\n label: instance.name,\n group: instance.healthy ? 'instance' : 'instance_bad',\n title: JSON.stringify(instance),\n };\n });\n\n this.visNetworkService.fit(this.visNetwork);\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n\n updateResources() {\n /* disable auto-update for now\n this.updateSubscription = Observable\n .interval(this.updateInterval)\n .flatMap(i => this.instanceService.getAll(this.clusterName))*/\n this.instanceService.getAll(this.clusterName).subscribe((result) => {\n _.forEach(result, (instance, index, _collection) => {\n (this.visNetworkData.nodes as Node[])[index] = {\n id: this.instanceToId[instance.name],\n group: instance.healthy ? 'instance' : 'instance_bad',\n };\n });\n });\n }\n\n protected onNodeSelected(id) {\n const instanceName = _.findKey(this.instanceToId, (value) => value === id);\n if (instanceName) {\n this.selectedInstance = instanceName;\n // fetch relationships\n this.resourceService\n .getAllOnInstance(this.clusterName, instanceName)\n .subscribe(\n (resources) => {\n lodashForEach(resources, (resource) => {\n (this.visNetworkData.edges as Edge[])[\n this.visNetworkData.nodes.length\n ] = {\n from: id,\n to: this.resourceToId[resource.name],\n };\n });\n },\n (error) => this.helper.showError(error)\n );\n } else {\n const resourceName = _.findKey(\n this.resourceToId,\n (value) => value === id\n );\n if (resourceName) {\n this.selectedResource = resourceName;\n this.resourceService.get(this.clusterName, resourceName).subscribe(\n (resource) => {\n _(resource.partitions)\n .flatMap('replicas')\n .unionBy('instanceName')\n .map('instanceName')\n .forEach((instanceName) => {\n (this.visNetworkData.edges as Edge[])[\n this.visNetworkData.nodes.length\n ] = {\n from: this.instanceToId[instanceName],\n to: this.resourceToId[resourceName],\n };\n });\n },\n (error) => this.helper.showError(error)\n );\n }\n }\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ":host {\n width: 100%;\n height: 100%;\n}\n\n.cluster-dashboard {\n width: 800px;\n height: 600px;\n}\n\n.info {\n font-size: 12px;\n height: 36px;\n background-color: #fff;\n border-bottom: 1px solid #ccc;\n text-align: center;\n vertical-align: middle;\n line-height: 24px;\n}\n\n.oval {\n width: 80px;\n height: 24px;\n background-color: #7fcac3;\n border: 1px solid #65a19c;\n -moz-border-radius: 80px / 24px;\n -webkit-border-radius: 80px / 24px;\n border-radius: 80px / 24px;\n}\n\n.rectangle {\n width: 80px;\n height: 24px;\n background-color: #90caf9;\n border: 1px solid #73a1c7;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n border-radius: 5px;\n}\n\n.hint {\n color: gray;\n}\n",
"styleUrl": "./dashboard.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "el",
"type": "ElementRef",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "visNetworkService",
"type": "VisNetworkService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceService",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "instanceService",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 39,
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "el",
"type": "ElementRef",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "visNetworkService",
"type": "VisNetworkService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceService",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "instanceService",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit",
"AfterViewInit",
"OnDestroy"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section fxLayout=\"column\" fxFlex>\n <section\n class=\"info\"\n fxLayout=\"row\"\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n >\n <div class=\"oval\">Resource</div>\n <div class=\"rectangle\">Instance</div>\n <div class=\"hint\">(Scroll to zoom; Drag to move; Click for details)</div>\n <span fxFlex=\"1 1 auto\"></span>\n <button mat-button (click)=\"updateResources()\">\n <mat-icon>refresh</mat-icon>\n Refresh Status\n </button>\n <button\n mat-button\n *ngIf=\"selectedResource || selectedInstance\"\n color=\"accent\"\n [routerLink]=\"[\n '../',\n selectedResource ? 'resources' : 'instances',\n selectedResource || selectedInstance\n ]\"\n >\n {{ selectedResource || selectedInstance }}\n <mat-icon>arrow_forward</mat-icon>\n </button>\n </section>\n <section\n class=\"cluster-dashboard\"\n [visNetwork]=\"visNetwork\"\n [visNetworkData]=\"visNetworkData\"\n [visNetworkOptions]=\"visNetworkOptions\"\n (initialized)=\"networkInitialized()\"\n ></section>\n</section>\n"
},
{
"name": "DataTableComponent",
"id": "component-DataTableComponent-bcb59ac9ef4611dfd2b6e29ff763367078f46aa64229a5ff38debe81307c89a82e47a8978514206ee91b3211bec6affb34ada8edea61ec90849ca845dc8f7b24",
"file": "src/app/shared/data-table/data-table.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-data-table",
"styleUrls": [
"./data-table.component.scss"
],
"styles": [],
"templateUrl": [
"./data-table.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "columns",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"line": 15,
"type": "{}",
"decorators": []
},
{
"name": "deletable",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 17,
"type": "boolean",
"decorators": []
},
{
"name": "insertable",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 18,
"type": "boolean",
"decorators": []
},
{
"name": "rows",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"line": 14,
"type": "{}",
"decorators": []
},
{
"name": "sorts",
"defaultValue": "[]",
"deprecated": false,
"deprecationMessage": "",
"line": 16,
"type": "{}",
"decorators": []
}
],
"outputsClass": [
{
"name": "create",
"defaultValue": "new EventEmitter<any>()",
"deprecated": false,
"deprecationMessage": "",
"line": 21,
"type": "EventEmitter<any>"
},
{
"name": "delete",
"defaultValue": "new EventEmitter<any>()",
"deprecated": false,
"deprecationMessage": "",
"line": 22,
"type": "EventEmitter<any>"
},
{
"name": "update",
"defaultValue": "new EventEmitter<any>()",
"deprecated": false,
"deprecationMessage": "",
"line": 20,
"type": "EventEmitter<any>"
}
],
"propertiesClass": [
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 24
}
],
"methodsClass": [
{
"name": "getPropName",
"args": [
{
"name": "column",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 87,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "column",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 28,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onCreate",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 43,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onDelete",
"args": [
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 69,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "onEdited",
"args": [
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "column",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "value",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 30,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "column",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "value",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Settings } from '../../core/settings';\nimport { InputDialogComponent } from '../dialog/input-dialog/input-dialog.component';\nimport { ConfirmDialogComponent } from '../dialog/confirm-dialog/confirm-dialog.component';\n\n@Component({\n selector: 'hi-data-table',\n templateUrl: './data-table.component.html',\n styleUrls: ['./data-table.component.scss'],\n})\nexport class DataTableComponent implements OnInit {\n @Input() rows = [];\n @Input() columns = [];\n @Input() sorts = [];\n @Input() deletable = false;\n @Input() insertable = false;\n\n @Output() update: EventEmitter<any> = new EventEmitter<any>();\n @Output() create: EventEmitter<any> = new EventEmitter<any>();\n @Output() delete: EventEmitter<any> = new EventEmitter<any>();\n\n rowHeight = Settings.tableRowHeight;\n\n constructor(protected dialog: MatDialog) {}\n\n ngOnInit() {}\n\n onEdited(row, column, value) {\n const prop = this.getPropName(column);\n\n // only emit when value changes\n if (row[prop] !== value) {\n this.update.emit({\n row,\n column,\n value,\n });\n }\n }\n\n onCreate() {\n const data = {\n title: 'Create a new item',\n message: 'Please enter the following information to continue:',\n values: {},\n };\n\n for (const column of this.columns) {\n const prop = this.getPropName(column);\n data.values[prop] = {\n label: column.name,\n };\n }\n\n this.dialog\n .open(InputDialogComponent, {\n data,\n })\n .afterClosed()\n .subscribe((result) => {\n if (result) {\n this.create.emit(result);\n }\n });\n }\n\n onDelete(row) {\n this.dialog\n .open(ConfirmDialogComponent, {\n data: {\n title: 'Confirmation',\n message: 'Are you sure you want to delete this configuration?',\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result) {\n this.delete.emit({\n row,\n });\n }\n });\n }\n\n getPropName(column): string {\n return column.prop ? column.prop : column.name.toLowerCase();\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.mat-icon {\n @include md-icon-size(20px);\n\n &:hover {\n color: mat.get-color-from-palette($hi-warn);\n }\n}\n\n.mat-icon-button {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n\n.footer {\n width: 100%;\n padding: 0 20px;\n}\n",
"styleUrl": "./data-table.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 24,
"jsdoctags": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<ngx-datatable\n #dataTable\n class=\"material\"\n [headerHeight]=\"rowHeight\"\n rowHeight=\"auto\"\n [footerHeight]=\"rowHeight\"\n columnMode=\"force\"\n [rows]=\"rows\"\n [sorts]=\"sorts\"\n [limit]=\"20\"\n>\n <ngx-datatable-column\n *ngIf=\"deletable\"\n [width]=\"40\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <button\n mat-icon-button\n matTooltip=\"Click to delete\"\n (click)=\"onDelete(row)\"\n >\n <mat-icon>delete_forever</mat-icon>\n </button>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n *ngFor=\"let column of columns\"\n [name]=\"column.name\"\n [prop]=\"getPropName(column)\"\n >\n <ng-template ngx-datatable-cell-template let-value=\"value\" let-row=\"row\">\n <span *ngIf=\"!column.editable\" [title]=\"value\">{{ value }}</span>\n <hi-input-inline\n *ngIf=\"column.editable\"\n [value]=\"value\"\n label=\"new value\"\n (update)=\"onEdited(row, column, $event)\"\n >\n </hi-input-inline>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSize=\"pageSize\"\n let-curPage=\"curPage\"\n >\n <section\n class=\"footer\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n <button mat-button *ngIf=\"insertable\" (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n Add new entry\n </button>\n <section>{{ rowCount }} total</section>\n <section>\n <datatable-pager\n [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\n [pagerRightArrowIcon]=\"'datatable-icon-right'\"\n [pagerPreviousIcon]=\"'datatable-icon-prev'\"\n [pagerNextIcon]=\"'datatable-icon-skip'\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n [hidden]=\"!(rowCount / pageSize > 1)\"\n (change)=\"dataTable.onFooterPage($event)\"\n >\n </datatable-pager>\n </section>\n </section>\n </ng-template>\n </ngx-datatable-footer>\n</ngx-datatable>\n"
},
{
"name": "DetailHeaderComponent",
"id": "component-DetailHeaderComponent-e20f20ac06350b9592c8531f98be075b515b6db415a36315e38acf02285b4e8bba558d562429cbe90b62ffda84fd0aa816d1f6d591c36ab2f40ef8c0a9a72975",
"file": "src/app/shared/detail-header/detail-header.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-detail-header",
"styleUrls": [
"./detail-header.component.scss"
],
"styles": [],
"templateUrl": [
"./detail-header.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "cluster",
"deprecated": false,
"deprecationMessage": "",
"line": 9,
"type": "any",
"decorators": []
},
{
"name": "controller",
"deprecated": false,
"deprecationMessage": "",
"line": 12,
"type": "any",
"decorators": []
},
{
"name": "instance",
"deprecated": false,
"deprecationMessage": "",
"line": 11,
"type": "any",
"decorators": []
},
{
"name": "resource",
"deprecated": false,
"deprecationMessage": "",
"line": 10,
"type": "any",
"decorators": []
},
{
"name": "workflow",
"deprecated": false,
"deprecationMessage": "",
"line": 13,
"type": "any",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [],
"methodsClass": [
{
"name": "getTag",
"args": [],
"optional": false,
"returnType": "\"controller\" | \"instance\" | \"resource\" | \"workflow\" | \"cluster\"",
"typeParameters": [],
"line": 21,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "isSecondary",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 17,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'hi-detail-header',\n templateUrl: './detail-header.component.html',\n styleUrls: ['./detail-header.component.scss'],\n})\nexport class DetailHeaderComponent {\n @Input() cluster;\n @Input() resource;\n @Input() instance;\n @Input() controller;\n @Input() workflow;\n\n constructor() {}\n\n isSecondary() {\n return this.controller || this.instance || this.resource || this.workflow;\n }\n\n getTag() {\n if (this.controller) {\n return 'controller';\n }\n if (this.instance) {\n return 'instance';\n }\n if (this.resource) {\n return 'resource';\n }\n if (this.workflow) {\n return 'workflow';\n }\n return 'cluster';\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.secondary {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.tag {\n padding-left: 10px;\n\n span {\n color: #fff;\n font-size: 12px;\n line-height: 12px;\n text-transform: uppercase;\n font-weight: normal;\n border-radius: 24px;\n padding: 6px 8px;\n }\n\n .cluster {\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$indigo-palette)\n );\n }\n\n .controller {\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$purple-palette)\n );\n }\n\n .resource {\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$teal-palette)\n );\n }\n\n .instance {\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$blue-palette)\n );\n }\n\n .workflow {\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$deep-orange-palette)\n );\n }\n}\n",
"styleUrl": "./detail-header.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 13
},
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<h4 fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span [ngClass]=\"{ secondary: isSecondary() }\">{{ cluster }}</span>\n <mat-icon *ngIf=\"isSecondary()\" class=\"secondary\">navigate_next</mat-icon>\n <span *ngIf=\"controller\">{{ controller }}</span>\n <span *ngIf=\"instance\">{{ instance }}</span>\n <span *ngIf=\"resource\">{{ resource }}</span>\n <span *ngIf=\"workflow\">{{ workflow }}</span>\n <span class=\"tag\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span [ngClass]=\"getTag()\">{{ getTag() }}</span>\n <!-- for testing purpose only\n <span class=\"cluster\">Cluster</span>\n <span class=\"resource\">Resource</span>\n <span class=\"instance\">Instance</span>\n <span class=\"controller\">Controller</span>\n <span class=\"workflow\">Workflow</span> -->\n </span>\n</h4>\n"
},
{
"name": "DisabledLabelComponent",
"id": "component-DisabledLabelComponent-999171e0a825db19679e3d7cafd1662c67e5438acfb6e7e87cfe73bf3905867f400a2aa9eb7df163e4367019ed9f951c6443a84a36e0689b0c6b3fdb10b982b4",
"file": "src/app/shared/disabled-label/disabled-label.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-disabled-label",
"styleUrls": [
"./disabled-label.component.scss"
],
"styles": [],
"templateUrl": [
"./disabled-label.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "text",
"deprecated": false,
"deprecationMessage": "",
"line": 10,
"type": "string",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'hi-disabled-label',\n templateUrl: './disabled-label.component.html',\n styleUrls: ['./disabled-label.component.scss'],\n})\nexport class DisabledLabelComponent implements OnInit {\n @Input()\n text: string;\n\n constructor() {}\n\n ngOnInit() {}\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.status-disabled {\n margin-left: 10px;\n padding: 4px 8px;\n font-size: 12px;\n line-height: 40px;\n border-radius: 4px;\n border: 1px solid\n mat.get-color-from-palette(mat.define-palette(mat.$red-palette), 900);\n background-color: mat.get-color-from-palette(\n mat.define-palette(mat.$red-palette),\n darker\n );\n color: rgb(255, 255, 255);\n}\n",
"styleUrl": "./disabled-label.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 10
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<span class=\"status-disabled\">{{ text }}</span>\n"
},
{
"name": "HelixListComponent",
"id": "component-HelixListComponent-b61ff325f78c2e5e99724708a8fcd9fc0ed70527218999178dc024d0cc49aa7527de019d9551432797bc7c650cc6624e811fc6bf066ee2a33ee4a0452d677dde",
"file": "src/app/chooser/helix-list/helix-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-helix-list",
"styleUrls": [
"./helix-list.component.scss"
],
"styles": [],
"templateUrl": [
"./helix-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "groups",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 13
},
{
"name": "keys",
"defaultValue": "_.keys",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 14
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 18,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\n\nimport * as _ from 'lodash';\n\nimport { ChooserService } from '../shared/chooser.service';\n\n@Component({\n selector: 'hi-helix-list',\n templateUrl: './helix-list.component.html',\n styleUrls: ['./helix-list.component.scss'],\n})\nexport class HelixListComponent implements OnInit {\n groups: any;\n keys = _.keys;\n\n constructor(protected service: ChooserService) {}\n\n ngOnInit() {\n this.service.getAll().subscribe((data) => (this.groups = data));\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".section {\n padding-bottom: 20px;\n\n .mat-button {\n width: 150px;\n text-align: left;\n }\n}\n\n.mat-card-title {\n font-size: 20px;\n}\n",
"styleUrl": "./helix-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "service",
"type": "ChooserService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 14,
"jsdoctags": [
{
"name": "service",
"type": "ChooserService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<mat-card *ngFor=\"let group of keys(groups)\">\n <mat-card-header>\n <mat-card-title>{{ group | titlecase }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <section *ngFor=\"let section of groups[group]\" class=\"section\">\n <a\n *ngFor=\"let helix of keys(section)\"\n mat-button\n [routerLink]=\"['/', group + '.' + helix]\"\n >\n <mat-icon>group_work</mat-icon>\n {{ helix }}\n </a>\n </section>\n </mat-card-content>\n</mat-card>\n"
},
{
"name": "HistoryListComponent",
"id": "component-HistoryListComponent-01bcd83ee2e247be53ee336ee0927e07f65e82f7e867400d08f33c1c3e884a7cd1e6501a93b0149f5b577ca06a17817d98612d64909b7c96e11160ccbff5444a",
"file": "src/app/history/history-list/history-list.component.ts",
"encapsulation": [
"ViewEncapsulation.None"
],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "HistoryService"
}
],
"selector": "hi-history-list",
"styleUrls": [
"./history-list.component.scss"
],
"styles": [],
"templateUrl": [
"./history-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "bindFunc",
"defaultValue": "_.bind",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 27
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 21
},
{
"name": "isController",
"deprecated": false,
"deprecationMessage": "",
"type": "boolean",
"optional": false,
"description": "",
"line": 22
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 23
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 20
},
{
"name": "rows",
"deprecated": false,
"deprecationMessage": "",
"type": "History[]",
"optional": false,
"description": "",
"line": 19
},
{
"name": "sorts",
"defaultValue": "[{ prop: 'date', dir: 'desc' }]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 24
}
],
"methodsClass": [
{
"name": "getControllerCellClass",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 49,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getSessionCellClass",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 55,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 31,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport * as _ from 'lodash';\n\nimport { Settings } from '../../core/settings';\nimport { HistoryService } from '../shared/history.service';\nimport { History } from '../shared/history.model';\n\n@Component({\n selector: 'hi-history-list',\n templateUrl: './history-list.component.html',\n styleUrls: ['./history-list.component.scss'],\n providers: [HistoryService],\n // FIXME: have to turn off shadow dom or .current-controller won't work\n encapsulation: ViewEncapsulation.None,\n})\nexport class HistoryListComponent implements OnInit {\n rows: History[];\n rowHeight = Settings.tableRowHeight;\n headerHeight = Settings.tableHeaderHeight;\n isController: boolean;\n isLoading = true;\n sorts = [{ prop: 'date', dir: 'desc' }];\n\n // to let ngx-datatable helper funcs have 'this' context\n bindFunc = _.bind;\n\n constructor(private route: ActivatedRoute, private service: HistoryService) {}\n\n ngOnInit() {\n if (this.route.parent) {\n const clusterName = this.route.parent.snapshot.params['cluster_name'];\n const instanceName = this.route.parent.snapshot.params['instance_name'];\n const observable = instanceName\n ? this.service.getInstanceHistory(clusterName, instanceName)\n : this.service.getControllerHistory(clusterName);\n\n this.isController = !instanceName;\n\n observable.subscribe(\n (histories) => (this.rows = histories),\n (error) => {},\n () => (this.isLoading = false)\n );\n }\n }\n\n getControllerCellClass({ value }): any {\n return {\n current: value == this.rows[this.rows.length - 1].controller,\n };\n }\n\n getSessionCellClass({ value }): any {\n return {\n current: value == this.rows[this.rows.length - 1].session,\n };\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "// Import theming functions\n@use '@angular/material' as mat;\n// Import custom theme\n@import 'src/theme.scss';\n\nhi-history-list {\n .current {\n color: mat.get-color-from-palette($hi-primary);\n }\n\n .mat-icon {\n @include md-icon-size(20px);\n }\n}\n",
"styleUrl": "./history-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "HistoryService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 27,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "HistoryService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <ngx-datatable\n #historyTable\n class=\"material\"\n [loadingIndicator]=\"isLoading\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [rows]=\"rows\"\n [sorts]=\"sorts\"\n >\n <ngx-datatable-column\n name=\"Date (GMT)\"\n prop=\"date\"\n [width]=\"240\"\n [canAutoResize]=\"false\"\n ></ngx-datatable-column>\n <ngx-datatable-column\n name=\"Epoch Time\"\n prop=\"time\"\n [width]=\"200\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <span matTooltip=\"Local time: {{ value | date: 'medium' }}\">\n {{ value }}\n </span>\n <button\n mat-icon-button\n matTooltip=\"Copy to clipboard\"\n ngxClipboard\n [cbContent]=\"value\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Controller\"\n *ngIf=\"isController\"\n [cellClass]=\"bindFunc(getControllerCellClass, this)\"\n >\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Session\"\n *ngIf=\"!isController\"\n [cellClass]=\"bindFunc(getSessionCellClass, this)\"\n >\n </ngx-datatable-column>\n </ngx-datatable>\n</section>\n"
},
{
"name": "InputDialogComponent",
"id": "component-InputDialogComponent-697b5d9943ebc0dfea46d32175dc4d62e7d7faa9614b551e1b29e4186a0c8ffa0e809005433f426396a3c5c7b502bd1ff942f230e32c2fa484d450a3c4b75539",
"file": "src/app/shared/dialog/input-dialog/input-dialog.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-input-dialog",
"styleUrls": [
"./input-dialog.component.scss"
],
"styles": [],
"templateUrl": [
"./input-dialog.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "message",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 12
},
{
"name": "title",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 11
},
{
"name": "values",
"deprecated": false,
"deprecationMessage": "",
"type": "any[]",
"optional": false,
"description": "",
"line": 13
}
],
"methodsClass": [
{
"name": "getKeys",
"args": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 39,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "obj",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onCancel",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 35,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onSubmit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 31,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'hi-input-dialog',\n templateUrl: './input-dialog.component.html',\n styleUrls: ['./input-dialog.component.scss'],\n})\nexport class InputDialogComponent implements OnInit {\n title: string;\n message: string;\n values: any[];\n\n constructor(\n @Inject(MAT_DIALOG_DATA) protected data: any,\n protected dialogRef: MatDialogRef<InputDialogComponent>\n ) {}\n\n ngOnInit() {\n this.title = (this.data && this.data.title) || 'Input';\n this.message = (this.data && this.data.message) || 'Please enter:';\n this.values = (this.data && this.data.values) || {\n input: {\n label: 'Anything you want',\n type: 'input',\n },\n };\n }\n\n onSubmit() {\n this.dialogRef.close(this.values);\n }\n\n onCancel() {\n this.dialogRef.close();\n }\n\n getKeys(obj: any) {\n return Object.keys(obj);\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./input-dialog.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "dialogRef",
"type": "MatDialogRef<InputDialogComponent>",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 13,
"jsdoctags": [
{
"name": "data",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "dialogRef",
"type": "MatDialogRef<InputDialogComponent>",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<form (ngSubmit)=\"onSubmit()\" #inputForm=\"ngForm\">\n <h1 mat-dialog-title>{{ title }}</h1>\n <div mat-dialog-content>\n <section>\n {{ message }}\n </section>\n <section\n *ngFor=\"let name of getKeys(values)\"\n [ngSwitch]=\"values[name].type\"\n >\n <section *ngSwitchCase=\"'boolean'\">\n {{ values[name].label }}:\n <mat-slide-toggle [name]=\"name\" [(ngModel)]=\"values[name].value\">\n {{ values[name].value ? 'True' : 'False' }}\n </mat-slide-toggle>\n </section>\n <mat-form-field *ngSwitchCase=\"'password'\">\n <input\n matInput\n type=\"password\"\n [name]=\"name\"\n [(ngModel)]=\"values[name].value\"\n [placeholder]=\"values[name].label\"\n required\n />\n </mat-form-field>\n <mat-form-field *ngSwitchDefault>\n <input\n matInput\n [name]=\"name\"\n [(ngModel)]=\"values[name].value\"\n [placeholder]=\"values[name].label\"\n required\n />\n </mat-form-field>\n </section>\n </div>\n <div mat-dialog-actions>\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!inputForm.form.valid\"\n >\n OK\n </button>\n <button mat-button type=\"button\" (click)=\"onCancel()\">Cancel</button>\n </div>\n</form>\n"
},
{
"name": "InputInlineComponent",
"id": "component-InputInlineComponent-0d5104f2eef29edab9c7de978d6b3bc3615b776ccf22aa1a7ae75d12e7d589dd0848a0e6c739562d0eeba3144ebb06dfb0b35ff51c7f83322c41241cdeaa5df3",
"file": "src/app/shared/input-inline/input-inline.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-input-inline",
"styleUrls": [
"./input-inline.component.scss"
],
"styles": [],
"templateUrl": [
"./input-inline.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "blur",
"defaultValue": "(_) => {}",
"deprecated": false,
"deprecationMessage": "",
"line": 54,
"type": "Function",
"decorators": []
},
{
"name": "disabled",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 32,
"type": "boolean",
"decorators": []
},
{
"name": "editLabel",
"defaultValue": "'Click to edit'",
"deprecated": false,
"deprecationMessage": "",
"line": 31,
"type": "string",
"decorators": []
},
{
"name": "errorLabel",
"defaultValue": "'Invalid input value'",
"deprecated": false,
"deprecationMessage": "",
"line": 30,
"type": "string",
"decorators": []
},
{
"name": "focus",
"defaultValue": "(_) => {}",
"deprecated": false,
"deprecationMessage": "",
"line": 53,
"type": "Function",
"decorators": []
},
{
"name": "label",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"line": 22,
"type": "string",
"decorators": []
},
{
"name": "max",
"defaultValue": "99999999",
"deprecated": false,
"deprecationMessage": "",
"line": 24,
"type": "number",
"decorators": []
},
{
"name": "maxlength",
"defaultValue": "2555",
"deprecated": false,
"deprecationMessage": "",
"line": 26,
"type": "number",
"decorators": []
},
{
"name": "min",
"defaultValue": "-9999",
"deprecated": false,
"deprecationMessage": "",
"line": 23,
"type": "number",
"decorators": []
},
{
"name": "minlength",
"defaultValue": "0",
"deprecated": false,
"deprecationMessage": "",
"line": 25,
"type": "number",
"decorators": []
},
{
"name": "pattern",
"defaultValue": "null",
"deprecated": false,
"deprecationMessage": "",
"line": 29,
"type": "string",
"decorators": []
},
{
"name": "required",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 28,
"type": "boolean",
"decorators": []
},
{
"name": "type",
"defaultValue": "'text'",
"deprecated": false,
"deprecationMessage": "",
"line": 27,
"type": "string",
"decorators": []
},
{
"name": "value",
"deprecated": false,
"deprecationMessage": "",
"line": 44,
"type": "any",
"decorators": []
}
],
"outputsClass": [
{
"name": "update",
"defaultValue": "new EventEmitter<string>()",
"deprecated": false,
"deprecationMessage": "",
"line": 20,
"type": "EventEmitter<string>"
}
],
"propertiesClass": [
{
"name": "_value",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 36,
"modifierKind": [
121
]
},
{
"name": "editing",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 34
},
{
"name": "inputControl",
"deprecated": false,
"deprecationMessage": "",
"type": "ElementRef",
"optional": false,
"description": "",
"line": 18,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'inputControl', {static: true}"
}
]
},
{
"name": "lastValue",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 38,
"modifierKind": [
121
]
},
{
"name": "onChange",
"defaultValue": "Function.prototype",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 41,
"modifierKind": [
123
]
},
{
"name": "onTouched",
"defaultValue": "Function.prototype",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 42,
"modifierKind": [
123
]
}
],
"methodsClass": [
{
"name": "cancel",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 105,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "edit",
"args": [
{
"name": "value",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 83,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "value",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "hasError",
"args": [],
"optional": false,
"returnType": "boolean",
"typeParameters": [],
"line": 69,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 67,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onBlur",
"args": [
{
"name": "$event",
"type": "Event",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "boolean",
"typeParameters": [],
"line": 95,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "$event",
"type": "Event",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "registerOnChange",
"args": [
{
"name": "fn",
"type": "function",
"deprecated": false,
"deprecationMessage": "",
"function": [
{
"name": "_",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
]
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 55,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "fn",
"type": "function",
"deprecated": false,
"deprecationMessage": "",
"function": [
{
"name": "_",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"tagName": {
"text": "param"
}
}
]
},
{
"name": "registerOnTouched",
"args": [
{
"name": "fn",
"type": "function",
"deprecated": false,
"deprecationMessage": "",
"function": []
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 58,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "fn",
"type": "function",
"deprecated": false,
"deprecationMessage": "",
"function": [],
"tagName": {
"text": "param"
}
}
]
},
{
"name": "writeValue",
"args": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 61,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import {\n Component,\n OnInit,\n Input,\n Output,\n ViewChild,\n ElementRef,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\n\n@Component({\n selector: 'hi-input-inline',\n templateUrl: './input-inline.component.html',\n styleUrls: ['./input-inline.component.scss'],\n})\nexport class InputInlineComponent implements ControlValueAccessor, OnInit {\n @ViewChild('inputControl', { static: true }) inputControl: ElementRef;\n\n @Output('update') change: EventEmitter<string> = new EventEmitter<string>();\n\n @Input() label = '';\n @Input() min = -9999;\n @Input() max = 99999999;\n @Input() minlength = 0;\n @Input() maxlength = 2555;\n @Input() type = 'text';\n @Input() required = false;\n @Input() pattern: string = null;\n @Input() errorLabel = 'Invalid input value';\n @Input() editLabel = 'Click to edit';\n @Input() disabled = false;\n\n editing = false;\n\n private _value = '';\n\n private lastValue = '';\n\n // Required forControlValueAccessor interface\n public onChange: any = Function.prototype;\n public onTouched: any = Function.prototype;\n @Input()\n get value(): any {\n return this._value;\n }\n set value(v: any) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n }\n }\n @Input() focus: Function = (_) => {};\n @Input() blur: Function = (_) => {};\n public registerOnChange(fn: (_: any) => {}): void {\n this.onChange = fn;\n }\n public registerOnTouched(fn: () => {}): void {\n this.onTouched = fn;\n }\n writeValue(value: any) {\n this._value = value;\n }\n\n constructor() {}\n\n ngOnInit() {}\n\n hasError() {\n const exp = new RegExp(this.pattern);\n\n if (!this.value) {\n return this.required;\n }\n\n if (this.pattern && !exp.test(this.value)) {\n return true;\n }\n\n return false;\n }\n\n edit(value) {\n if (this.disabled) {\n return;\n }\n\n this.lastValue = value;\n this.editing = true;\n setTimeout((_) => {\n this.inputControl?.nativeElement.focus();\n });\n }\n\n onBlur($event: Event) {\n if (this.hasError()) {\n return false;\n }\n\n // this.blur();\n this.editing = false;\n this.change.emit(this.value);\n }\n\n cancel() {\n this._value = this.lastValue;\n this.editing = false;\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".inline-edit {\n text-decoration: none;\n border-bottom: dashed 1px #009090;\n cursor: pointer;\n line-height: 2;\n margin: 0;\n}\n\n.error {\n color: #a94442;\n}\n\n.empty-value {\n color: gray;\n font-style: italic;\n}\n\n.full-width {\n width: 100%;\n}\n",
"styleUrl": "./input-inline.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 63
},
"implements": [
"ControlValueAccessor",
"OnInit"
],
"accessors": {
"value": {
"name": "value",
"setSignature": {
"name": "value",
"type": "void",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "v",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"returnType": "void",
"line": 47,
"jsdoctags": [
{
"name": "v",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"getSignature": {
"name": "value",
"type": "any",
"returnType": "any",
"line": 44
}
}
},
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <mat-form-field\n *ngIf=\"editing\"\n class=\"full-width {{ hasError() ? 'error' : '' }}\"\n >\n <input\n matInput\n #inputControl\n [min]=\"min\"\n [max]=\"max\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n (focus)=\"focus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup.enter)=\"onBlur($event)\"\n (keyup.escape)=\"cancel()\"\n [required]=\"required\"\n [name]=\"value\"\n [(ngModel)]=\"value\"\n [type]=\"type\"\n [placeholder]=\"label\"\n />\n <mat-hint *ngIf=\"hasError()\" align=\"start\">{{ errorLabel }}</mat-hint>\n <mat-hint align=\"end\">press ESC to cancel</mat-hint>\n </mat-form-field>\n <section *ngIf=\"!editing\">\n <div\n class=\"inline-edit {{ hasError() ? 'error' : '' }}\"\n [matTooltip]=\"editLabel\"\n (click)=\"edit(value)\"\n (focus)=\"edit(value)\"\n tabindex=\"0\"\n >\n <span *ngIf=\"value.length\">{{ value }}</span>\n <span *ngIf=\"!value.length\" class=\"empty-value\">( Empty )</span>\n </div>\n </section>\n</section>\n"
},
{
"name": "InstanceDetailComponent",
"id": "component-InstanceDetailComponent-b55a7689c26a2aac4ab7ea9cdcacbf15fd4540921055407c528f90d2ec255779b62656dcfbab878b749f8780bb3996f25e282609c9fc9fd96a9f4260068d8681",
"file": "src/app/instance/instance-detail/instance-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "InstanceService"
}
],
"selector": "hi-instance-detail",
"styleUrls": [
"./instance-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./instance-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 21
},
{
"name": "instance",
"deprecated": false,
"deprecationMessage": "",
"type": "Instance",
"optional": false,
"description": "",
"line": 23
},
{
"name": "instanceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 22
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 24
},
{
"name": "tabLinks",
"defaultValue": "[\n { label: 'Resources', link: 'resources' },\n { label: 'Configuration', link: 'configs' },\n { label: 'History', link: 'history' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 15,
"modifierKind": [
144
]
}
],
"methodsClass": [
{
"name": "disableInstance",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enableInstance",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 60,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "loadInstance",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 76,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 34,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "removeInstance",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 41,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { Instance } from '../shared/instance.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { InstanceService } from '../shared/instance.service';\n\n@Component({\n selector: 'hi-instance-detail',\n templateUrl: './instance-detail.component.html',\n styleUrls: ['./instance-detail.component.scss'],\n providers: [InstanceService],\n})\nexport class InstanceDetailComponent implements OnInit {\n readonly tabLinks = [\n { label: 'Resources', link: 'resources' },\n { label: 'Configuration', link: 'configs' },\n { label: 'History', link: 'history' },\n ];\n\n clusterName: string;\n instanceName: string;\n instance: Instance;\n isLoading = true;\n can = false;\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected service: InstanceService,\n protected helperService: HelperService\n ) {}\n\n ngOnInit() {\n this.service.can().subscribe((data) => (this.can = data));\n this.clusterName = this.route.snapshot.params.cluster_name;\n this.instanceName = this.route.snapshot.params.instance_name;\n this.loadInstance();\n }\n\n removeInstance() {\n this.helperService\n .showConfirmation('Are you sure you want to remove this Instance?')\n .then((result) => {\n if (result) {\n this.service.remove(this.clusterName, this.instance.name).subscribe(\n /* happy path */ () => {\n this.helperService.showSnackBar(\n `Instance: ${this.instance.name} removed!`\n );\n this.router.navigate(['..'], { relativeTo: this.route });\n },\n /* error path */ (error) => this.helperService.showError(error),\n /* onComplete */ () => (this.isLoading = false)\n );\n }\n });\n }\n\n enableInstance() {\n this.service.enable(this.clusterName, this.instance.name).subscribe(\n /* happy path */ () => this.loadInstance(),\n /* error path */ (error) => this.helperService.showError(error),\n /* onComplete */ () => (this.isLoading = false)\n );\n }\n\n disableInstance() {\n this.service.disable(this.clusterName, this.instance.name).subscribe(\n /* happy path */ () => this.loadInstance(),\n /* error path */ (error) => this.helperService.showError(error),\n /* onComplete */ () => (this.isLoading = false)\n );\n }\n\n protected loadInstance() {\n this.isLoading = true;\n this.service.get(this.clusterName, this.instanceName).subscribe(\n /* happy path */ (instance) => (this.instance = instance),\n /* error path */ (error) => this.helperService.showError(error),\n /* onComplete */ () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".information {\n font-size: 14px;\n\n .mat-spinner {\n margin: 0 20px;\n }\n}\n",
"styleUrl": "./instance-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helperService",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 25,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helperService",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <mat-toolbar class=\"mat-elevation-z1\">\n <mat-toolbar-row>\n <hi-detail-header\n [cluster]=\"clusterName\"\n [instance]=\"instanceName\"\n ></hi-detail-header>\n <hi-disabled-label\n *ngIf=\"!isLoading && !instance.liveInstance\"\n text=\"OFFLINE\"\n ></hi-disabled-label>\n <hi-disabled-label\n *ngIf=\"!isLoading && !instance.enabled\"\n text=\"DISABLED\"\n ></hi-disabled-label>\n </mat-toolbar-row>\n <mat-toolbar-row class=\"information\">\n <a mat-mini-fab routerLink=\"../\"><mat-icon>arrow_back</mat-icon></a>\n <mat-spinner *ngIf=\"isLoading\" diameter=\"30\"></mat-spinner>\n <hi-key-value-pairs *ngIf=\"!isLoading\" [obj]=\"instance\">\n <hi-key-value-pair\n name=\"Instance\"\n prop=\"liveInstance\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Session ID\"\n prop=\"sessionId\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Helix Version\"\n prop=\"helixVersion\"\n ></hi-key-value-pair>\n </hi-key-value-pairs>\n <span fxFlex=\"1 1 auto\"></span>\n <button mat-mini-fab *ngIf=\"can\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>menu</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"instance && instance.enabled\"\n (click)=\"disableInstance()\"\n >\n <mat-icon>not_interested</mat-icon>\n <span>Disable this Instance</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"instance && !instance.enabled\"\n (click)=\"enableInstance()\"\n >\n <mat-icon>play_circle_outline</mat-icon>\n <span>Enable this Instance</span>\n </button>\n <button mat-menu-item (click)=\"removeInstance()\">\n <mat-icon>delete</mat-icon>\n <span>REMOVE this Instance</span>\n </button>\n </mat-menu>\n </mat-toolbar-row>\n </mat-toolbar>\n <nav mat-tab-nav-bar>\n <a\n mat-tab-link\n *ngFor=\"let tabLink of tabLinks\"\n [routerLink]=\"tabLink.link\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n >\n {{ tabLink.label }}\n </a>\n </nav>\n <router-outlet></router-outlet>\n</section>\n"
},
{
"name": "InstanceListComponent",
"id": "component-InstanceListComponent-35f72bfbe30673df7f9938981527ed7e8e3e6d3a9ed2f942c965f937fd642dce81c8c0a9a646c411bec1523ed889f5523ef5f04ae0cf39dc01a584c63d60cf7f",
"file": "src/app/instance/instance-list/instance-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-instance-list",
"styleUrls": [
"./instance-list.component.scss"
],
"styles": [],
"templateUrl": [
"./instance-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 15
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 18
},
{
"name": "instances",
"deprecated": false,
"deprecationMessage": "",
"type": "any[]",
"optional": false,
"description": "",
"line": 16
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 14
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 17
},
{
"name": "sorts",
"defaultValue": "[\n { prop: 'liveInstance', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 19
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 31,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onSelect",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 42,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { InstanceService } from '../shared/instance.service';\nimport { HelperService } from '../../shared/helper.service';\n\n@Component({\n selector: 'hi-instance-list',\n templateUrl: './instance-list.component.html',\n styleUrls: ['./instance-list.component.scss'],\n})\nexport class InstanceListComponent implements OnInit {\n isLoading = true;\n clusterName: string;\n instances: any[];\n rowHeight = Settings.tableRowHeight;\n headerHeight = Settings.tableHeaderHeight;\n sorts = [\n { prop: 'liveInstance', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ];\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected service: InstanceService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n if (this.route.parent) {\n this.clusterName = this.route.parent.snapshot.params['name'];\n this.service.getAll(this.clusterName).subscribe(\n (data) => (this.instances = data),\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n }\n\n onSelect({ selected }) {\n const row = selected[0];\n this.router.navigate([row.name], { relativeTo: this.route });\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.info {\n padding: 24px;\n}\n\n.status-healthy {\n color: mat.get-color-from-palette(mat.define-palette(mat.$blue-palette));\n}\n\n.status-not-healthy {\n color: mat.get-color-from-palette(\n mat.define-palette(mat.$grey-palette, 900, 900, 900)\n );\n}\n",
"styleUrl": "./instance-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 22,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "InstanceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <ngx-datatable\n #instancesTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [footerHeight]=\"rowHeight\"\n [rows]=\"instances\"\n [loadingIndicator]=\"isLoading\"\n selectionType=\"single\"\n [sorts]=\"sorts\"\n (select)=\"onSelect($event)\"\n >\n <ngx-datatable-column\n name=\"Status\"\n prop=\"healthy\"\n [width]=\"85\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <mat-icon *ngIf=\"row.healthy\" class=\"status-healthy\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"!row.healthy && row.enabled\"\n class=\"status-not-healthy\"\n matTooltip=\"The instance is offline.\"\n >cancel</mat-icon\n >\n <mat-icon\n *ngIf=\"!row.healthy && row.liveInstance\"\n class=\"status-not-healthy\"\n matTooltip=\"The instance is disabled.\"\n >cancel</mat-icon\n >\n <mat-icon\n *ngIf=\"!row.healthy && !row.enabled && !row.liveInstance\"\n class=\"status-not-healthy\"\n matTooltip=\"The instance is offline and disabled.\"\n >cancel</mat-icon\n >\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column name=\"Name\">\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <section fxLayout=\"row\" fxLayoutAlign=\"start center\">\n {{ row.name }}\n <hi-disabled-label\n *ngIf=\"!row.enabled\"\n text=\"DISABLED\"\n ></hi-disabled-label>\n </section>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n</section>\n"
},
{
"name": "JobDetailComponent",
"id": "component-JobDetailComponent-f867f82b47b2796be3d33b8faeac4572678328079975e1ae94ca12962c56d1d0ba67df643ef78d610cf5aaac22d196fc20f58232e6ea0e8dda4f67eea43feafb",
"file": "src/app/workflow/job-detail/job-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-job-detail",
"styleUrls": [
"./job-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./job-detail.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "job",
"deprecated": false,
"deprecationMessage": "",
"line": 14,
"type": "Job",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 16
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 20,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\n\nimport { Job } from '../shared/workflow.model';\nimport { JobService } from '../shared/job.service';\nimport { HelperService } from '../../shared/helper.service';\n\n@Component({\n selector: 'hi-job-detail',\n templateUrl: './job-detail.component.html',\n styleUrls: ['./job-detail.component.scss'],\n})\nexport class JobDetailComponent implements OnInit {\n @Input()\n job: Job;\n\n isLoading = true;\n\n constructor(protected service: JobService, protected helper: HelperService) {}\n\n ngOnInit() {\n this.service.get(this.job).subscribe(\n (data) => (this.isLoading = false),\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./job-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "service",
"type": "JobService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 16,
"jsdoctags": [
{
"name": "service",
"type": "JobService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<mat-tab-group>\n <mat-tab label=\"Job Config\">\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <ngx-json-viewer [json]=\"job?.config\"></ngx-json-viewer>\n </mat-tab>\n <mat-tab label=\"Job Context\">\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <ngx-json-viewer [json]=\"job?.context\"></ngx-json-viewer>\n </mat-tab>\n</mat-tab-group>\n"
},
{
"name": "JobListComponent",
"id": "component-JobListComponent-a5573f0e5ef4cbb87ba2de5c7ab184e255c1d99386e23b0945f48793e19665ba581e805aee7f412fba3550bb1a67e89f6e4b570d7ec72a70c646f2a8df0fdf9b",
"file": "src/app/workflow/job-list/job-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-job-list",
"styleUrls": [
"./job-list.component.scss"
],
"styles": [],
"templateUrl": [
"./job-list.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "jobs",
"deprecated": false,
"deprecationMessage": "",
"line": 16,
"type": "Job[]",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 22
},
{
"name": "messages",
"defaultValue": "{\n emptyMessage: 'The list is empty.',\n totalMessage: 'total',\n selectedMessage: 'selected',\n }",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 27
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 21
},
{
"name": "sorts",
"defaultValue": "[\n { prop: 'startTime', dir: 'desc' },\n { prop: 'name', dir: 'asc' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 23
},
{
"name": "table",
"deprecated": false,
"deprecationMessage": "",
"type": "DatatableComponent",
"optional": false,
"description": "",
"line": 19,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'jobsTable', {static: false}"
}
]
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 35,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onSelect",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 41,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "parseTime",
"args": [
{
"name": "rawTime",
"type": "string",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "string",
"typeParameters": [],
"line": 37,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "rawTime",
"type": "string",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input, ViewChild } from '@angular/core';\n\nimport moment from 'moment';\n\nimport { Settings } from '../../core/settings';\nimport { Job } from '../shared/workflow.model';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\n@Component({\n selector: 'hi-job-list',\n templateUrl: './job-list.component.html',\n styleUrls: ['./job-list.component.scss'],\n})\nexport class JobListComponent implements OnInit {\n @Input()\n jobs: Job[];\n\n @ViewChild('jobsTable', { static: false })\n table: DatatableComponent;\n\n rowHeight = Settings.tableRowHeight;\n headerHeight = Settings.tableHeaderHeight;\n sorts = [\n { prop: 'startTime', dir: 'desc' },\n { prop: 'name', dir: 'asc' },\n ];\n messages = {\n emptyMessage: 'The list is empty.',\n totalMessage: 'total',\n selectedMessage: 'selected',\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n parseTime(rawTime: string): string {\n return moment(parseInt(rawTime)).fromNow();\n }\n\n onSelect({ selected }) {\n const row = selected[0];\n\n this.table.rowDetail.toggleExpandRow(row);\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./job-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 31
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<ngx-datatable\n #jobsTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [footerHeight]=\"rowHeight\"\n [rows]=\"jobs\"\n selectionType=\"single\"\n [sorts]=\"sorts\"\n (select)=\"onSelect($event)\"\n [messages]=\"messages\"\n fxFill\n>\n <ngx-datatable-column\n [width]=\"50\"\n [resizeable]=\"false\"\n [sortable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-expanded=\"expanded\" ngx-datatable-cell-template>\n <mat-icon>{{ expanded ? 'expand_more' : 'chevron_right' }}</mat-icon>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Start Time\"\n [width]=\"200\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <span *ngIf=\"value\" [matTooltip]=\"value | date: 'medium'\">\n {{ parseTime(value) }}\n </span>\n <span *ngIf=\"!value\">-</span>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column name=\"Job Name\" prop=\"name\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <span [matTooltip]=\"row.rawName\"> ...{{ value }} </span>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"State\"\n [width]=\"120\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <span *ngIf=\"value\" class=\"state-default state-{{ value }}\">\n {{ value }}\n </span>\n <span *ngIf=\"!value\" class=\"state-PENDING\">PENDING</span>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-row-detail rowHeight=\"auto\">\n <ng-template let-row=\"row\" ngx-datatable-row-detail-template>\n <hi-job-detail [job]=\"row\"></hi-job-detail>\n </ng-template>\n </ngx-datatable-row-detail>\n</ngx-datatable>\n"
},
{
"name": "JsonViewerComponent",
"id": "component-JsonViewerComponent-7bb6618bfc8e8abc0125cd1e32cd727e70f4433192471674d72a4285c6edf4fee443c6e06976b4f750c5ca61d1cb777d9f706191f8f92465cf91596e9870f55b",
"file": "src/app/shared/json-viewer/json-viewer.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-json-viewer",
"styleUrls": [
"./json-viewer.component.scss"
],
"styles": [],
"templateUrl": [
"./json-viewer.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "obj",
"deprecated": false,
"deprecationMessage": "",
"line": 13,
"type": "any",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 17,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'hi-json-viewer',\n templateUrl: './json-viewer.component.html',\n styleUrls: ['./json-viewer.component.scss'],\n})\nexport class JsonViewerComponent implements OnInit {\n // MODE 1: use directly in components\n @Input() obj: any;\n\n constructor(protected route: ActivatedRoute) {}\n\n ngOnInit() {\n // MODE 2: use in router\n if (this.route.snapshot.data.path) {\n const path = this.route.snapshot.data.path;\n\n // try parent data first\n this.obj = _.get(this.route.parent, `snapshot.data.${path}`);\n\n if (this.obj == null) {\n // try self data then\n this.obj = _.get(this.route.snapshot.data, path);\n }\n }\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./json-viewer.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 13,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<pre>{{ obj | json }}</pre>\n"
},
{
"name": "KeyValuePairsComponent",
"id": "component-KeyValuePairsComponent-c86780162af35a2b28f0057e0fa60aebe7d591a8fb7d988e956f1678d95bb90839c20db5a06d32fa01ee0f1b9189a86ec2ab987947c486426254fd7cd9aab6bd",
"file": "src/app/shared/key-value-pairs/key-value-pairs.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-key-value-pairs",
"styleUrls": [
"./key-value-pairs.component.scss"
],
"styles": [],
"templateUrl": [
"./key-value-pairs.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "obj",
"deprecated": false,
"deprecationMessage": "",
"line": 30,
"type": "any",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "getProp",
"defaultValue": "_.get",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "pairs",
"deprecated": false,
"deprecationMessage": "",
"type": "QueryList<KeyValuePairDirective>",
"optional": false,
"description": "",
"line": 28,
"decorators": [
{
"name": "ContentChildren",
"stringifiedArguments": "KeyValuePairDirective"
}
]
}
],
"methodsClass": [],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import {\n Component,\n ContentChildren,\n Directive,\n Input,\n QueryList,\n} from '@angular/core';\n\nimport * as _ from 'lodash';\n\n// good doc: https://angular.io/docs/ts/latest/api/core/index/ContentChildren-decorator.html\n\n@Directive({ selector: 'hi-key-value-pair' })\nexport class KeyValuePairDirective {\n @Input() name: string;\n @Input() prop: string;\n}\n\n@Component({\n selector: 'hi-key-value-pairs',\n templateUrl: './key-value-pairs.component.html',\n styleUrls: ['./key-value-pairs.component.scss'],\n})\nexport class KeyValuePairsComponent {\n getProp = _.get;\n\n @ContentChildren(KeyValuePairDirective)\n pairs: QueryList<KeyValuePairDirective>;\n\n @Input() obj: any;\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".groups {\n font-size: 14px;\n line-height: 14px;\n\n .column {\n padding-left: 40px;\n }\n\n .name {\n font-size: 12px;\n line-height: 12px;\n color: rgba(0, 0, 0, 0.54);\n }\n}\n",
"styleUrl": "./key-value-pairs.component.scss"
}
],
"stylesData": "",
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section class=\"groups\" fxLayout=\"row\">\n <section class=\"column\" *ngFor=\"let pair of pairs\">\n <div class=\"name\">{{ pair.name }}</div>\n <div class=\"value\" *ngIf=\"obj != null && getProp(obj, pair.prop) != null\">\n {{ getProp(obj, pair.prop) }}\n </div>\n <div class=\"value\" *ngIf=\"obj == null || getProp(obj, pair.prop) == null\">\n N/A\n </div>\n </section>\n</section>\n"
},
{
"name": "NodeViewerComponent",
"id": "component-NodeViewerComponent-c30983867249a031151ea924d5136b0949a6f2f247d308780a18b62f1f93b61371fb7ac285d7bfd2776de183a6e015aa5bea0e6bf7f93f0286cfec140a1aeb81",
"file": "src/app/shared/node-viewer/node-viewer.component.ts",
"encapsulation": [
"ViewEncapsulation.None"
],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "ResourceService"
}
],
"selector": "hi-node-viewer",
"styleUrls": [
"./node-viewer.component.scss"
],
"styles": [],
"templateUrl": [
"./node-viewer.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "loadingIndicator",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 73,
"type": "boolean",
"decorators": []
},
{
"name": "obj",
"deprecated": false,
"deprecationMessage": "",
"line": 111,
"type": "any",
"decorators": []
},
{
"name": "unlockable",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"line": 70,
"type": "boolean",
"decorators": []
}
],
"outputsClass": [
{
"name": "create",
"defaultValue": "new EventEmitter<Node>()",
"deprecated": false,
"deprecationMessage": "",
"line": 64,
"type": "EventEmitter<Node>"
},
{
"name": "delete",
"defaultValue": "new EventEmitter<Node>()",
"deprecated": false,
"deprecationMessage": "",
"line": 67,
"type": "EventEmitter<Node>"
},
{
"name": "update",
"defaultValue": "new EventEmitter<Node>()",
"deprecated": false,
"deprecationMessage": "",
"line": 61,
"type": "EventEmitter<Node>"
}
],
"propertiesClass": [
{
"name": "_editable",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 75,
"modifierKind": [
121
]
},
{
"name": "_listConfigs",
"deprecated": false,
"deprecationMessage": "",
"type": "any[]",
"optional": false,
"description": "",
"line": 105
},
{
"name": "_mapConfigs",
"deprecated": false,
"deprecationMessage": "",
"type": "any[]",
"optional": false,
"description": "",
"line": 107
},
{
"name": "_obj",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 77,
"modifierKind": [
122
]
},
{
"name": "_simpleConfigs",
"deprecated": false,
"deprecationMessage": "",
"type": "any[]",
"optional": false,
"description": "",
"line": 103
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 54
},
{
"name": "columns",
"defaultValue": "{\n simpleConfigs: [\n {\n name: 'Name',\n editable: false,\n },\n {\n name: 'Value',\n editable: false,\n },\n ],\n listConfigs: [\n {\n name: 'Value',\n editable: false,\n },\n ],\n }",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 84
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 80
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 53
},
{
"name": "keyword",
"defaultValue": "''",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 83
},
{
"name": "listTable",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 57,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'listTable', {static: true}"
}
]
},
{
"name": "mapTable",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 58,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'mapTable', {static: true}"
}
]
},
{
"name": "node",
"deprecated": false,
"deprecationMessage": "",
"type": "Node",
"optional": false,
"description": "",
"line": 78,
"modifierKind": [
122
]
},
{
"name": "resourceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 55
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 81
},
{
"name": "simpleTable",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 56,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'simpleTable', {static: true}"
}
]
},
{
"name": "sorts",
"defaultValue": "[{ prop: 'name', dir: 'asc' }]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 82
}
],
"methodsClass": [
{
"name": "beforeDelete",
"args": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 269,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "created",
"args": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "data",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "key",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 299,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "data",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "key",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "edited",
"args": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "key",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "isDeleting",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 336,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "key",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "isDeleting",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "getNameCellClass",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 226,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 187,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onCreate",
"args": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 233,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "onDelete",
"args": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 285,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "type",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "row",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "updateFilter",
"args": [
{
"name": "event",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 211,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "event",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import {\n Component,\n OnInit,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n EventEmitter,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport * as _ from 'lodash';\n// import * as ace from 'ace-builds/src-noconflict/ace';\nimport 'ace-builds';\nimport 'ace-builds/webpack-resolver';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/theme-chrome';\nimport { config } from 'ace-builds';\n\nimport { ResourceService } from '../../resource/shared/resource.service';\nimport { HelperService } from '../../shared/helper.service';\nimport { Node } from '../models/node.model';\nimport { Settings } from '../../core/settings';\nimport { InputDialogComponent } from '../dialog/input-dialog/input-dialog.component';\nimport { ConfirmDialogComponent } from '../dialog/confirm-dialog/confirm-dialog.component';\n\nexport type IdealState = {\n id: string;\n simpleFields?: { [key: string]: any };\n listFields?: { [key: string]: any };\n mapFields?: { [key: string]: any };\n};\n\nconfig.set(\n 'basePath',\n 'https://cdn.jsdelivr.net/npm/ace-builds@1.6.0/src-noconflict/'\n);\nconfig.setModuleUrl(\n 'ace/mode/javascript_worker',\n 'https://cdn.jsdelivr.net/npm/ace-builds@1.6.0/src-noconflict/worker-json.js'\n);\n@Component({\n selector: 'hi-node-viewer',\n templateUrl: './node-viewer.component.html',\n styleUrls: ['./node-viewer.component.scss'],\n providers: [ResourceService],\n // Since we are importing external styles in this component\n // we will not use Shadow DOM at all to make sure the styles apply\n encapsulation: ViewEncapsulation.None,\n})\nexport class NodeViewerComponent implements OnInit {\n isLoading = true;\n clusterName: string;\n resourceName: string;\n @ViewChild('simpleTable', { static: true }) simpleTable;\n @ViewChild('listTable', { static: true }) listTable;\n @ViewChild('mapTable', { static: true }) mapTable;\n\n @Output('update')\n change: EventEmitter<Node> = new EventEmitter<Node>();\n\n @Output('create')\n create: EventEmitter<Node> = new EventEmitter<Node>();\n\n @Output('delete')\n delete: EventEmitter<Node> = new EventEmitter<Node>();\n\n @Input()\n unlockable = false;\n\n @Input()\n loadingIndicator = false;\n\n private _editable = false;\n\n protected _obj: any;\n protected node: Node;\n\n headerHeight = Settings.tableHeaderHeight;\n rowHeight = Settings.tableRowHeight;\n sorts = [{ prop: 'name', dir: 'asc' }];\n keyword = '';\n columns = {\n simpleConfigs: [\n {\n name: 'Name',\n editable: false,\n },\n {\n name: 'Value',\n editable: false,\n },\n ],\n listConfigs: [\n {\n name: 'Value',\n editable: false,\n },\n ],\n };\n\n _simpleConfigs: any[];\n\n _listConfigs: any[];\n\n _mapConfigs: any[];\n\n // MODE 1: use directly in components\n @Input()\n set obj(value: any) {\n if (value !== null) {\n this._obj = value;\n this.node = new Node(value);\n }\n }\n get obj(): any {\n return this._obj;\n }\n set objString(value: string | null) {\n let parsedValue = null;\n if (value && value !== null) {\n parsedValue = JSON.parse(value);\n }\n\n this.obj = parsedValue;\n this.node = new Node(parsedValue);\n }\n get objString(): string {\n return JSON.stringify(this.obj, null, 2);\n }\n set editable(value: boolean) {\n this._editable = value;\n this.columns.simpleConfigs[1].editable = this._editable;\n this.columns.listConfigs[0].editable = this._editable;\n }\n get editable() {\n return this._editable;\n }\n get simpleConfigs(): any[] {\n return this.node\n ? _.filter(\n this.node.simpleFields,\n (config) =>\n config.name.toLowerCase().indexOf(this.keyword) >= 0 ||\n config.value.toLowerCase().indexOf(this.keyword) >= 0\n )\n : [];\n }\n get listConfigs(): any[] {\n return this.node\n ? _.filter(\n this.node.listFields,\n (config) =>\n config.name.toLowerCase().indexOf(this.keyword) >= 0 ||\n _.some(\n config.value as any[],\n (subconfig) =>\n subconfig.value.toLowerCase().indexOf(this.keyword) >= 0\n )\n )\n : [];\n }\n get mapConfigs(): any[] {\n return this.node\n ? _.filter(\n this.node.mapFields,\n (config) =>\n config.name.toLowerCase().trim().indexOf(this.keyword) >= 0 ||\n _.some(\n config.value as any[],\n (subconfig) =>\n subconfig.name.toLowerCase().trim().indexOf(this.keyword) >=\n 0 || subconfig.value.toLowerCase().indexOf(this.keyword) >= 0\n )\n )\n : [];\n }\n\n public constructor(\n protected dialog: MatDialog,\n protected route: ActivatedRoute,\n protected resourceService: ResourceService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n // MODE 2: use in router\n if (this.route.snapshot.data.path) {\n const path = this.route.snapshot.data.path;\n\n // try parent data first\n this.obj = _.get(this.route.parent, `snapshot.data.${path}`);\n\n if (this.obj == null) {\n // try self data then\n this.obj = _.get(this.route.snapshot.data, path);\n }\n\n this.objString = JSON.stringify(this.obj, null, 2);\n }\n\n if (this.route.parent) {\n this.clusterName =\n this.route.parent.snapshot.params.name ||\n this.route.parent.snapshot.params.cluster_name;\n this.resourceName = this.route.parent.snapshot.params.resource_name;\n }\n }\n\n updateFilter(event) {\n this.keyword = event.target.value.toLowerCase().trim();\n\n // Whenever the filter changes, always go back to the first page\n if (this.simpleTable) {\n this.simpleTable.offset = 0;\n }\n if (this.listTable) {\n this.listTable.offset = 0;\n }\n if (this.mapTable) {\n this.mapTable.offset = 0;\n }\n }\n\n getNameCellClass({ value }): any {\n return {\n // highlight HELIX own configs\n primary: _.snakeCase(value).toUpperCase() === value,\n };\n }\n\n onCreate(type) {\n this.dialog\n .open(InputDialogComponent, {\n data: {\n title: `Create a new ${type} configuration`,\n message:\n \"Please enter the name of the new configuration. You'll be able to add values later:\",\n values: {\n name: {\n label: 'the name of the new configuration',\n },\n },\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result) {\n const entry = [\n {\n name: result.name.value,\n value: [],\n },\n ];\n\n const newNode: Node = new Node(null);\n if (type === 'list') {\n newNode.listFields = entry;\n } else if (type === 'map') {\n newNode.mapFields = entry;\n }\n\n this.create.emit(newNode);\n }\n });\n }\n\n beforeDelete(type, row) {\n this.dialog\n .open(ConfirmDialogComponent, {\n data: {\n title: 'Confirmation',\n message: 'Are you sure you want to delete this configuration?',\n },\n })\n .afterClosed()\n .subscribe((result) => {\n if (result) {\n this.onDelete(type, row);\n }\n });\n }\n\n onDelete(type, row) {\n const newNode: Node = new Node(null);\n\n if (type === 'simple') {\n newNode.appendSimpleField(row.name, '');\n } else if (type === 'list') {\n newNode.listFields = [{ name: row.name.trim(), value: [] }];\n } else if (type === 'map') {\n newNode.mapFields = [{ name: row.name.trim(), value: null }];\n }\n\n this.delete.emit(newNode);\n }\n\n created(type, data, key) {\n const newNode: Node = new Node(null);\n\n switch (type) {\n case 'simple':\n newNode.appendSimpleField(data.name.value, data.value.value);\n break;\n\n case 'list':\n if (key) {\n const entry = _.find(this.node.listFields, { name: key });\n\n entry.value.push({\n name: '',\n value: data.value.value,\n });\n\n newNode.listFields.push(entry);\n }\n break;\n\n case 'map':\n if (key) {\n const entry = _.find(this.node.mapFields, { name: key.trim() });\n\n _.forEach(entry.value, (item: any) => {\n newNode.appendMapField(key, item.name, item.value);\n });\n\n newNode.appendMapField(key, data.name.value, data.value.value);\n }\n break;\n }\n\n this.create.emit(newNode);\n }\n\n edited(type, { row, column, value }, key, isDeleting) {\n if (!isDeleting && column.name !== 'Value') {\n return;\n }\n\n const newNode: Node = new Node(null);\n\n switch (type) {\n case 'simple':\n newNode.appendSimpleField(row.name, value);\n break;\n\n case 'list':\n if (key) {\n const entry = _.find(this.node.listFields, { name: key });\n const index = _.findIndex(entry.value, { value: row.value });\n\n if (isDeleting) {\n entry.value.splice(index, 1);\n } else {\n entry.value[index].value = value;\n }\n\n newNode.listFields.push(entry);\n }\n break;\n\n case 'map':\n if (key) {\n // have to fetch all other configs under this key\n const entry = _.find(this.node.mapFields, { name: key.trim() });\n newNode.mapFields = [{ name: key.trim(), value: [] }];\n\n _.forEach(entry.value, (item: any) => {\n if (item.name === row.name) {\n if (!isDeleting) {\n newNode.appendMapField(key.trim(), item.name.trim(), value);\n }\n } else {\n newNode.appendMapField(key.trim(), item.name.trim(), item.value);\n }\n });\n }\n break;\n }\n\n const path = this?.route?.snapshot?.data?.path;\n if (path && path === 'idealState') {\n const idealState: IdealState = {\n id: this.resourceName,\n };\n\n // format the payload the way that helix-rest expects\n // before: { simpleFields: [{ name: 'NUM_PARTITIONS', value: 2 }] };\n // after: { simpleFields: { NUM_PARTITIONS: 2 } };\n function appendIdealStateProperty(property: keyof Node) {\n if (Array.isArray(newNode[property]) && newNode[property].length > 0) {\n idealState[property] = {} as any;\n (newNode[property] as any[]).forEach((field) => {\n idealState[property][field.name] = field.value;\n });\n }\n }\n Object.keys(newNode).forEach((key) =>\n appendIdealStateProperty(key as keyof Node)\n );\n\n const observer = this.resourceService.setIdealState(\n this.clusterName,\n this.resourceName,\n idealState\n );\n\n if (observer) {\n this.isLoading = true;\n observer.subscribe(\n () => {\n this.helper.showSnackBar('Ideal State updated!');\n },\n (error) => {\n this.helper.showError(error);\n this.isLoading = false;\n },\n () => (this.isLoading = false)\n );\n }\n }\n\n this.change.emit(newNode);\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.node-viewer {\n padding: 10px;\n}\n\n.primary {\n color: mat.get-color-from-palette($hi-primary);\n}\n\n.search-form-field {\n width: 300px;\n padding: 10px 0 0 5px;\n}\n\nmat-card {\n margin-bottom: 10px;\n}\n\nngx-datatable {\n word-break: break-all;\n}\n\n.footer {\n width: 100%;\n padding: 0 20px;\n}\n\n.delete-button {\n width: 24px;\n height: 24px;\n line-height: 24px;\n\n .mat-icon {\n @include md-icon-size(20px);\n\n &:hover {\n color: mat.get-color-from-palette($hi-warn);\n }\n }\n}\n",
"styleUrl": "./node-viewer.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resourceService",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 178,
"modifierKind": [
123
],
"jsdoctags": [
{
"name": "dialog",
"type": "MatDialog",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "resourceService",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"accessors": {
"obj": {
"name": "obj",
"setSignature": {
"name": "obj",
"type": "void",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": ""
}
],
"returnType": "void",
"line": 111,
"jsdoctags": [
{
"name": "value",
"type": "any",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"getSignature": {
"name": "obj",
"type": "any",
"returnType": "any",
"line": 117
}
},
"objString": {
"name": "objString",
"setSignature": {
"name": "objString",
"type": "void",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "value",
"type": "string | null",
"deprecated": false,
"deprecationMessage": ""
}
],
"returnType": "void",
"line": 120,
"jsdoctags": [
{
"name": "value",
"type": "string | null",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"getSignature": {
"name": "objString",
"type": "string",
"returnType": "string",
"line": 129
}
},
"editable": {
"name": "editable",
"setSignature": {
"name": "editable",
"type": "void",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "value",
"type": "boolean",
"deprecated": false,
"deprecationMessage": ""
}
],
"returnType": "void",
"line": 132,
"jsdoctags": [
{
"name": "value",
"type": "boolean",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"getSignature": {
"name": "editable",
"type": "",
"returnType": "",
"line": 137
}
},
"simpleConfigs": {
"name": "simpleConfigs",
"getSignature": {
"name": "simpleConfigs",
"type": "[]",
"returnType": "any[]",
"line": 140
}
},
"listConfigs": {
"name": "listConfigs",
"getSignature": {
"name": "listConfigs",
"type": "[]",
"returnType": "any[]",
"line": 150
}
},
"mapConfigs": {
"name": "mapConfigs",
"getSignature": {
"name": "mapConfigs",
"type": "[]",
"returnType": "any[]",
"line": 164
}
}
},
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section\n class=\"node-viewer\"\n fxLayout=\"column\"\n fxLayoutAlign=\"center center\"\n fxLayoutGap=\"10px\"\n>\n <mat-progress-bar\n *ngIf=\"loadingIndicator\"\n mode=\"indeterminate\"\n ></mat-progress-bar>\n <mat-button-toggle-group #group=\"matButtonToggleGroup\" value=\"table\">\n <mat-button-toggle value=\"table\"> Table View </mat-button-toggle>\n <mat-button-toggle value=\"tree\"> Tree View </mat-button-toggle>\n <mat-button-toggle value=\"json\"> JSON View </mat-button-toggle>\n </mat-button-toggle-group>\n <section class=\"viewer\" [ngSwitch]=\"group.value\" fxFlexFill>\n <ngx-json-viewer *ngSwitchCase=\"'tree'\" [json]=\"obj\"></ngx-json-viewer>\n <ace-editor\n *ngSwitchCase=\"'json'\"\n [(text)]=\"objString\"\n mode=\"json\"\n theme=\"chrome\"\n [options]=\"{ useWorker: false }\"\n style=\"min-height: 300px\"\n #editor\n >\n </ace-editor>\n <section *ngSwitchCase=\"'table'\">\n <!-- TODO vxu: use mat-simple-table when it's available -->\n\n <section fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span fxFlex=\"1 1 auto\"></span>\n <mat-icon>search</mat-icon>\n <mat-form-field class=\"search-form-field\">\n <input\n matInput\n placeholder=\"Type to filter the fields...\"\n (keyup)=\"updateFilter($event)\"\n />\n </mat-form-field>\n <span fxFlex=\"1 1 auto\"></span>\n <!-- *ngIf=\"unlockable\" -->\n <button\n mat-button\n (click)=\"editable = !editable\"\n [matTooltip]=\"\n editable\n ? 'Click to prevent further changes'\n : 'Click to make changes'\n \"\n >\n <mat-icon>{{ editable ? 'lock_open' : 'lock' }}</mat-icon>\n {{ editable ? 'Unlocked' : 'Locked' }}\n </button>\n </section>\n\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Simple Fields\n <span *ngIf=\"simpleConfigs.length == 0\">is empty.</span>\n <span *ngIf=\"keyword\" class=\"primary\">(filtered)</span>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <hi-data-table\n *ngIf=\"simpleConfigs.length || editable\"\n [rows]=\"simpleConfigs\"\n [sorts]=\"sorts\"\n [columns]=\"columns.simpleConfigs\"\n [deletable]=\"editable\"\n [insertable]=\"editable\"\n (update)=\"edited('simple', $event)\"\n (create)=\"created('simple', $event)\"\n (delete)=\"onDelete('simple', $event.row)\"\n >\n </hi-data-table>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n List Fields\n <span *ngIf=\"listConfigs.length == 0\">is empty.</span>\n <span *ngIf=\"keyword\" class=\"primary\">(filtered)</span>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <ngx-datatable\n *ngIf=\"listConfigs.length || editable\"\n #listTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n rowHeight=\"auto\"\n [footerHeight]=\"headerHeight\"\n columnMode=\"force\"\n [rows]=\"listConfigs\"\n [sorts]=\"sorts\"\n [limit]=\"10\"\n >\n <ngx-datatable-column\n *ngIf=\"editable\"\n [width]=\"40\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <button\n mat-icon-button\n class=\"delete-button\"\n matTooltip=\"Click to delete\"\n (click)=\"beforeDelete('list', row)\"\n >\n <mat-icon>delete_forever</mat-icon>\n </button>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Name\"\n [width]=\"80\"\n [cellClass]=\"getNameCellClass\"\n ></ngx-datatable-column>\n <ngx-datatable-column name=\"Value\" [width]=\"400\">\n <ng-template\n let-row=\"row\"\n let-value=\"value\"\n ngx-datatable-cell-template\n >\n <hi-data-table\n [rows]=\"value\"\n [sorts]=\"sorts\"\n [columns]=\"columns.listConfigs\"\n [deletable]=\"editable\"\n [insertable]=\"editable\"\n (update)=\"edited('list', $event, row.name)\"\n (create)=\"created('list', $event, row.name)\"\n (delete)=\"edited('list', $event, row.name, true)\"\n >\n </hi-data-table>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSize=\"pageSize\"\n let-curPage=\"curPage\"\n >\n <section\n class=\"footer\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n <button\n mat-button\n *ngIf=\"editable\"\n (click)=\"onCreate('list')\"\n >\n <mat-icon>add</mat-icon>\n Add new entry\n </button>\n <section>{{ rowCount }} total</section>\n <section>\n <datatable-pager\n [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\n [pagerRightArrowIcon]=\"'datatable-icon-right'\"\n [pagerPreviousIcon]=\"'datatable-icon-prev'\"\n [pagerNextIcon]=\"'datatable-icon-skip'\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n [hidden]=\"!(rowCount / pageSize > 1)\"\n (change)=\"listTable.onFooterPage($event)\"\n >\n </datatable-pager>\n </section>\n </section>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Map Fields\n <span *ngIf=\"mapConfigs.length == 0\">is empty.</span>\n <span *ngIf=\"keyword\" class=\"primary\">(filtered)</span>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <ngx-datatable\n *ngIf=\"mapConfigs.length || editable\"\n #mapTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n rowHeight=\"auto\"\n [footerHeight]=\"headerHeight\"\n columnMode=\"force\"\n [rows]=\"mapConfigs\"\n [sorts]=\"sorts\"\n [limit]=\"10\"\n >\n <ngx-datatable-column\n *ngIf=\"editable\"\n [width]=\"40\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <button\n mat-icon-button\n class=\"delete-button\"\n matTooltip=\"Click to delete\"\n (click)=\"beforeDelete('map', row)\"\n >\n <mat-icon>delete_forever</mat-icon>\n </button>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Name\"\n [width]=\"80\"\n [cellClass]=\"getNameCellClass\"\n ></ngx-datatable-column>\n <ngx-datatable-column name=\"Value\" [width]=\"500\">\n <ng-template\n let-row=\"row\"\n let-value=\"value\"\n ngx-datatable-cell-template\n >\n <hi-data-table\n [rows]=\"value\"\n [sorts]=\"sorts\"\n [columns]=\"columns.simpleConfigs\"\n [deletable]=\"editable\"\n [insertable]=\"editable\"\n (update)=\"edited('map', $event, row.name)\"\n (create)=\"created('map', $event, row.name)\"\n (delete)=\"edited('map', $event, row.name, true)\"\n >\n </hi-data-table>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSize=\"pageSize\"\n let-curPage=\"curPage\"\n >\n <section\n class=\"footer\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n <button mat-button *ngIf=\"editable\" (click)=\"onCreate('map')\">\n <mat-icon>add</mat-icon>\n Add new entry\n </button>\n <section>{{ rowCount }} total</section>\n <section>\n <datatable-pager\n [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\n [pagerRightArrowIcon]=\"'datatable-icon-right'\"\n [pagerPreviousIcon]=\"'datatable-icon-prev'\"\n [pagerNextIcon]=\"'datatable-icon-skip'\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n [hidden]=\"!(rowCount / pageSize > 1)\"\n (change)=\"mapTable.onFooterPage($event)\"\n >\n </datatable-pager>\n </section>\n </section>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </mat-card-content>\n </mat-card>\n </section>\n </section>\n</section>\n"
},
{
"name": "PartitionDetailComponent",
"id": "component-PartitionDetailComponent-463580388c12c99bd1c92bd52093b3eab3165eb4d067030e077260fd4e27cca753de1c9398e42d19bf2fb08df271b0923eefc2909538d1f0047fc88cfa8331b6",
"file": "src/app/resource/partition-detail/partition-detail.component.ts",
"encapsulation": [
"ViewEncapsulation.None"
],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-partition-detail",
"styleUrls": [
"./partition-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./partition-detail.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"line": 13,
"type": "string",
"decorators": []
},
{
"name": "partition",
"deprecated": false,
"deprecationMessage": "",
"line": 14,
"type": "Partition",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 16
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 17
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 21,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input, ViewEncapsulation } from '@angular/core';\n\nimport { Settings } from '../../core/settings';\nimport { Partition, IReplica } from '../shared/resource.model';\n\n@Component({\n selector: 'hi-partition-detail',\n templateUrl: './partition-detail.component.html',\n styleUrls: ['./partition-detail.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class PartitionDetailComponent implements OnInit {\n @Input() clusterName: string;\n @Input() partition: Partition;\n\n headerHeight = Settings.tableHeaderHeight;\n rowHeight = Settings.tableRowHeight;\n\n constructor() {}\n\n ngOnInit() {}\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "hi-partition-detail {\n .datatable-body-cell {\n line-height: 40px !important;\n }\n}\n",
"styleUrl": "./partition-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 17
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<ngx-datatable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [rows]=\"partition?.replicas\"\n>\n <ngx-datatable-column\n name=\"Replica\"\n [width]=\"80\"\n [resizeable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n ngx-datatable-cell-template\n >\n <strong>#{{ rowIndex + 1 }}</strong>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column name=\"Instance\" prop=\"instanceName\">\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n <a\n mat-icon-button\n color=\"accent\"\n [routerLink]=\"['../../..', 'instances', value, 'resources']\"\n >\n <mat-icon>arrow_forward</mat-icon>\n </a>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"External View\"\n [width]=\"120\"\n [resizeable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <hi-state-label\n [state]=\"row.externalView\"\n [isReady]=\"row.externalView && row.externalView == row.idealState\"\n ></hi-state-label>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Ideal State\"\n [width]=\"120\"\n [resizeable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <hi-state-label\n [state]=\"row.idealState\"\n [isReady]=\"row.externalView && row.externalView == row.idealState\"\n ></hi-state-label>\n </ng-template>\n </ngx-datatable-column>\n</ngx-datatable>\n"
},
{
"name": "PartitionListComponent",
"id": "component-PartitionListComponent-70a28f903354492334fb538855578ae022be22a96e1512071bffb8019f8ed3f1722a66f7d9160f7f965ca29e57ff8e3eefe2af51735f6a7df13c7e955260cc5a",
"file": "src/app/resource/partition-list/partition-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-partition-list",
"styleUrls": [
"./partition-list.component.scss"
],
"styles": [],
"templateUrl": [
"./partition-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 20
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 23
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 19
},
{
"name": "partitions",
"deprecated": false,
"deprecationMessage": "",
"type": "Partition[]",
"optional": false,
"description": "",
"line": 22
},
{
"name": "resource",
"deprecated": false,
"deprecationMessage": "",
"type": "Resource",
"optional": false,
"description": "",
"line": 21
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 24
},
{
"name": "sorts",
"defaultValue": "[\n { prop: 'isReady', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 25
},
{
"name": "table",
"deprecated": false,
"deprecationMessage": "",
"type": "DatatableComponent",
"optional": false,
"description": "",
"line": 17,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'partitionsTable', {static: false}"
}
]
}
],
"methodsClass": [
{
"name": "canAnalyse",
"args": [],
"optional": false,
"returnType": "any",
"typeParameters": [],
"line": 45,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "getReasonWhyCannotAnalyse",
"args": [],
"optional": false,
"returnType": "boolean | string",
"typeParameters": [],
"line": 49,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "loadResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 68,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 36,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onSelect",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 62,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { Partition, IReplica, Resource } from '../shared/resource.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ResourceService } from '../shared/resource.service';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\n@Component({\n selector: 'hi-partition-list',\n templateUrl: './partition-list.component.html',\n styleUrls: ['./partition-list.component.scss'],\n})\nexport class PartitionListComponent implements OnInit {\n @ViewChild('partitionsTable', { static: false })\n table: DatatableComponent;\n\n isLoading = true;\n clusterName: string;\n resource: Resource;\n partitions: Partition[];\n headerHeight = Settings.tableHeaderHeight;\n rowHeight = Settings.tableRowHeight;\n sorts = [\n { prop: 'isReady', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ];\n\n constructor(\n protected route: ActivatedRoute,\n protected service: ResourceService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n if (this.route.parent) {\n this.clusterName = this.route.parent.snapshot.params.cluster_name;\n\n this.loadResource();\n }\n }\n\n // check whether we are capable of analysing the states :(\n canAnalyse() {\n return this.partitions && this.partitions.length;\n }\n\n getReasonWhyCannotAnalyse(): boolean | string {\n if (!this.canAnalyse()) {\n if (!this.resource.online) {\n return 'The resource is OFFLINE and does not have partition information available.';\n }\n if (this.resource.partitionCount < 1) {\n return 'This resource does not contain any partition information.';\n }\n }\n\n return false;\n }\n\n onSelect({ selected }) {\n const row = selected[0];\n\n this.table.rowDetail.toggleExpandRow(row);\n }\n\n protected loadResource() {\n const resourceName = this.resource\n ? this.resource.name\n : this.route.parent.snapshot.params.resource_name;\n this.isLoading = true;\n this.service.get(this.clusterName, resourceName).subscribe(\n (resource) => {\n this.resource = resource;\n this.partitions = this.resource.partitions;\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\ndiv.message {\n padding: 20px;\n}\n\n.status-ready {\n color: mat.get-color-from-palette(mat.define-palette(mat.$blue-palette));\n}\n\n.status-not-ready {\n color: mat.get-color-from-palette(\n mat.define-palette(mat.$grey-palette, 900, 900, 900),\n darker\n );\n}\n\n.footer {\n width: 100%;\n padding: 0 20px;\n}\n",
"styleUrl": "./partition-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 28,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <ngx-datatable\n *ngIf=\"canAnalyse()\"\n #partitionsTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [footerHeight]=\"rowHeight\"\n [rows]=\"partitions\"\n [sorts]=\"sorts\"\n [limit]=\"20\"\n selectionType=\"single\"\n (select)=\"onSelect($event)\"\n >\n <ngx-datatable-column\n [width]=\"50\"\n [resizeable]=\"false\"\n [sortable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-expanded=\"expanded\" ngx-datatable-cell-template>\n <mat-icon>{{ expanded ? 'expand_more' : 'chevron_right' }}</mat-icon>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n name=\"Status\"\n prop=\"isReady\"\n [width]=\"85\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <mat-icon *ngIf=\"value\" [ngClass]=\"'status-ready'\"\n >check_circle</mat-icon\n >\n <mat-icon *ngIf=\"!value\" [ngClass]=\"'status-not-ready'\">error</mat-icon>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column name=\"Name\"></ngx-datatable-column>\n <ngx-datatable-column\n name=\"Replicas\"\n [width]=\"100 * partitions[0].replicas.length\"\n [resizeable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <span *ngFor=\"let replica of value\" [matTooltip]=\"replica.instanceName\">\n <hi-state-label\n [state]=\"replica.externalView\"\n [isReady]=\"\n replica.externalView && replica.externalView == replica.idealState\n \"\n ></hi-state-label>\n </span>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-row-detail rowHeight=\"auto\">\n <ng-template let-row=\"row\" ngx-datatable-row-detail-template>\n <hi-partition-detail\n [clusterName]=\"resource.cluster\"\n [partition]=\"row\"\n ></hi-partition-detail>\n </ng-template>\n </ngx-datatable-row-detail>\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSize=\"pageSize\"\n let-curPage=\"curPage\"\n >\n <section\n class=\"footer\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n <section>{{ rowCount }} total</section>\n <section>\n <datatable-pager\n [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\n [pagerRightArrowIcon]=\"'datatable-icon-right'\"\n [pagerPreviousIcon]=\"'datatable-icon-prev'\"\n [pagerNextIcon]=\"'datatable-icon-skip'\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n [hidden]=\"!(rowCount / pageSize > 1)\"\n (change)=\"partitionsTable.onFooterPage($event)\"\n >\n </datatable-pager>\n </section>\n </section>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n <div\n *ngIf=\"!canAnalyse()\"\n class=\"message\"\n fxLayout=\"column\"\n fxLayoutAlign=\"center center\"\n >\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <section *ngIf=\"!isLoading && getReasonWhyCannotAnalyse()\" fxFlexFill>\n {{ getReasonWhyCannotAnalyse() }}\n </section>\n <section *ngIf=\"!isLoading && !getReasonWhyCannotAnalyse()\" fxFlexFill>\n <div>\n Sorry, we do not support this kind of partition information yet.\n Detailed debugging information:\n </div>\n <ngx-json-viewer [json]=\"resource\"></ngx-json-viewer>\n </section>\n </div>\n</section>\n"
},
{
"name": "ResourceDetailComponent",
"id": "component-ResourceDetailComponent-587b019911c77fbf4d9335ffad7f8878082ee880a2f0dc832a55e262a62df680ea10f330673366970b3d9d708d4ad7ee2688ba03fe21f745328c066d3130abc7",
"file": "src/app/resource/resource-detail/resource-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-resource-detail",
"styleUrls": [
"./resource-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./resource-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 21
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 24
},
{
"name": "resource",
"deprecated": false,
"deprecationMessage": "",
"type": "Resource",
"optional": false,
"description": "",
"line": 23
},
{
"name": "resourceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 22
},
{
"name": "tabLinks",
"defaultValue": "[\n { label: 'Partitions', link: 'partitions' },\n { label: 'External View', link: 'externalView' },\n { label: 'Ideal State', link: 'idealState' },\n { label: 'Configuration', link: 'configs' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 14,
"modifierKind": [
144
]
}
],
"methodsClass": [
{
"name": "disableResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 48,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "enableResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 41,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "loadResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 73,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 34,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "removeResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 55,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nimport { Resource } from '../shared/resource.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ResourceService } from '../shared/resource.service';\n\n@Component({\n selector: 'hi-resource-detail',\n templateUrl: './resource-detail.component.html',\n styleUrls: ['./resource-detail.component.scss'],\n})\nexport class ResourceDetailComponent implements OnInit {\n readonly tabLinks = [\n { label: 'Partitions', link: 'partitions' },\n { label: 'External View', link: 'externalView' },\n { label: 'Ideal State', link: 'idealState' },\n { label: 'Configuration', link: 'configs' },\n ];\n\n clusterName: string;\n resourceName: string;\n resource: Resource;\n isLoading = true;\n can = false;\n\n constructor(\n protected route: ActivatedRoute,\n protected router: Router,\n protected service: ResourceService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n this.service.can().subscribe((data) => (this.can = data));\n this.clusterName = this.route.snapshot.params.cluster_name;\n this.resourceName = this.route.snapshot.params.resource_name;\n this.loadResource();\n }\n\n enableResource() {\n this.service.enable(this.clusterName, this.resource.name).subscribe(\n () => this.loadResource(),\n (error) => this.helper.showError(error)\n );\n }\n\n disableResource() {\n this.service.disable(this.clusterName, this.resource.name).subscribe(\n () => this.loadResource(),\n (error) => this.helper.showError(error)\n );\n }\n\n removeResource() {\n this.helper\n .showConfirmation('Are you sure you want to remove this Resource?')\n .then((result) => {\n console.log(result);\n if (result) {\n this.service\n .remove(this.clusterName, this.resourceName)\n .subscribe((data) => {\n this.helper.showSnackBar(\n `Resource: ${this.resourceName} removed!`\n );\n this.router.navigate(['..'], { relativeTo: this.route });\n });\n }\n });\n }\n\n protected loadResource() {\n this.isLoading = true;\n this.service.get(this.clusterName, this.resourceName).subscribe(\n (resource) => (this.resource = resource),\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.offline {\n font-size: 14px;\n padding-left: 24px;\n color: mat.get-color-from-palette($hi-warn);\n}\n\n.information {\n .mat-spinner {\n margin: 0 20px;\n }\n}\n",
"styleUrl": "./resource-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 25,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <mat-toolbar class=\"mat-elevation-z1\">\n <mat-toolbar-row>\n <hi-detail-header\n [cluster]=\"clusterName\"\n [resource]=\"resourceName\"\n ></hi-detail-header>\n <hi-disabled-label\n *ngIf=\"!isLoading && !resource.online\"\n text=\"OFFLINE\"\n ></hi-disabled-label>\n <hi-disabled-label\n *ngIf=\"!isLoading && !resource.enabled\"\n text=\"DISABLED\"\n ></hi-disabled-label>\n </mat-toolbar-row>\n <mat-toolbar-row class=\"information\">\n <a mat-mini-fab routerLink=\"../\"><mat-icon>arrow_back</mat-icon></a>\n <mat-spinner *ngIf=\"isLoading\" diameter=\"30\"></mat-spinner>\n <hi-key-value-pairs *ngIf=\"!isLoading\" [obj]=\"resource\">\n <hi-key-value-pair\n name=\"Ideal State Mode\"\n prop=\"idealStateMode\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Rebalance Mode\"\n prop=\"rebalanceMode\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"State Model\"\n prop=\"stateModel\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Ideal Partitions\"\n prop=\"partitionCount\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Replication Factor\"\n prop=\"replicaCount\"\n ></hi-key-value-pair>\n </hi-key-value-pairs>\n <span fxFlex=\"1 1 auto\"></span>\n <button mat-mini-fab *ngIf=\"can\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>menu</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"resource && resource.enabled\"\n (click)=\"disableResource()\"\n >\n <mat-icon>not_interested</mat-icon>\n <span>Disable this Resource</span>\n </button>\n <button\n mat-menu-item\n *ngIf=\"resource && !resource.enabled\"\n (click)=\"enableResource()\"\n >\n <mat-icon>play_circle_outline</mat-icon>\n <span>Enable this Resource</span>\n </button>\n <button mat-menu-item *ngIf=\"false\" (click)=\"removeResource()\">\n <mat-icon>delete</mat-icon>\n <span>REMOVE this Resource</span>\n </button>\n </mat-menu>\n </mat-toolbar-row>\n </mat-toolbar>\n <nav mat-tab-nav-bar>\n <a\n mat-tab-link\n *ngFor=\"let tabLink of tabLinks\"\n [routerLink]=\"tabLink.link\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n >\n {{ tabLink.label }}\n </a>\n </nav>\n <router-outlet></router-outlet>\n</section>\n"
},
{
"name": "ResourceDetailForInstanceComponent",
"id": "component-ResourceDetailForInstanceComponent-6629801aea858195b6f42e57fdf03ae9faeda818c58c65307afdaea17d92a9756c5c497750b59a332c317def22fd90dc04ad77cf8f8fd2dac7d76310d3728900",
"file": "src/app/resource/resource-detail-for-instance/resource-detail-for-instance.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-resource-detail-for-instance",
"styleUrls": [
"./resource-detail-for-instance.component.scss"
],
"styles": [],
"templateUrl": [
"./resource-detail-for-instance.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"line": 11,
"type": "any",
"decorators": []
},
{
"name": "instanceName",
"deprecated": false,
"deprecationMessage": "",
"line": 12,
"type": "any",
"decorators": []
},
{
"name": "resourceName",
"deprecated": false,
"deprecationMessage": "",
"line": 13,
"type": "any",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 16
},
{
"name": "resourceOnInstance",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 15
},
{
"name": "rowHeight",
"defaultValue": "40",
"deprecated": false,
"deprecationMessage": "",
"type": "number",
"optional": false,
"description": "",
"line": 17
},
{
"name": "sorts",
"defaultValue": "[{ prop: 'name', dir: 'asc' }]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 18
}
],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 22,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\n\nimport { ResourceService } from '../shared/resource.service';\n\n@Component({\n selector: 'hi-resource-detail-for-instance',\n templateUrl: './resource-detail-for-instance.component.html',\n styleUrls: ['./resource-detail-for-instance.component.scss'],\n})\nexport class ResourceDetailForInstanceComponent implements OnInit {\n @Input() clusterName;\n @Input() instanceName;\n @Input() resourceName;\n\n resourceOnInstance: any;\n isLoading = true;\n rowHeight = 40;\n sorts = [{ prop: 'name', dir: 'asc' }];\n\n constructor(protected service: ResourceService) {}\n\n ngOnInit() {\n this.service\n .getOnInstance(this.clusterName, this.instanceName, this.resourceName)\n .subscribe(\n (resource) => (this.resourceOnInstance = resource),\n (error) => console.log(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "mat-spinner {\n margin: 0 auto;\n}\n\n[mat-button] {\n float: right;\n}\n\nhi-key-value-pairs {\n padding: 10px;\n}\n",
"styleUrl": "./resource-detail-for-instance.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 18,
"jsdoctags": [
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <section *ngIf=\"!isLoading\">\n <a\n mat-button\n color=\"accent\"\n [routerLink]=\"['../../..', 'resources', resourceName]\"\n >\n Other Partitions\n </a>\n\n <hi-key-value-pairs *ngIf=\"!isLoading\" [obj]=\"resourceOnInstance\">\n <hi-key-value-pair name=\"Session ID\" prop=\"sessionId\"></hi-key-value-pair>\n <hi-key-value-pair\n name=\"State Model\"\n prop=\"stateModelDef\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"State Model Factory Name\"\n prop=\"stateModelFactoryName\"\n ></hi-key-value-pair>\n </hi-key-value-pairs>\n\n <ngx-datatable\n #partitionsTable\n class=\"material\"\n [headerHeight]=\"rowHeight\"\n rowHeight=\"auto\"\n columnMode=\"force\"\n [rows]=\"resourceOnInstance.partitions\"\n [sorts]=\"sorts\"\n >\n <ngx-datatable-column name=\"Partition\" prop=\"name\"></ngx-datatable-column>\n <ngx-datatable-column\n name=\"Current State\"\n [width]=\"120\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <span [matTooltip]=\"row.info\">\n <hi-state-label [state]=\"row.currentState\"></hi-state-label>\n </span>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </section>\n</section>\n"
},
{
"name": "ResourceListComponent",
"id": "component-ResourceListComponent-d2d518a517b184de023ef2125e7b5c7ab63bb80e11aed1460a4cc593ced77ab4b6563f925defb1c1b6d4a3588f967706c3ead2cf525af620d74831aaae378df1",
"file": "src/app/resource/resource-list/resource-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [
{
"name": "WorkflowService"
}
],
"selector": "hi-resource-list",
"styleUrls": [
"./resource-list.component.scss"
],
"styles": [],
"templateUrl": [
"./resource-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 30
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 26
},
{
"name": "instanceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 31
},
{
"name": "isForInstance",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 29
},
{
"name": "resources",
"deprecated": false,
"deprecationMessage": "",
"type": "Resource[]",
"optional": false,
"description": "",
"line": 28
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 27
},
{
"name": "sorts",
"defaultValue": "[\n { prop: 'alive', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 32
},
{
"name": "table",
"deprecated": false,
"deprecationMessage": "",
"type": "DatatableComponent",
"optional": false,
"description": "",
"line": 23,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'resourcesTable', {static: false}"
}
]
}
],
"methodsClass": [
{
"name": "fetchResources",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 76,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 45,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "onSelect",
"args": [
{
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 99,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport * as _ from 'lodash';\n\nimport { Settings } from '../../core/settings';\nimport { Resource } from '../shared/resource.model';\nimport { ResourceService } from '../shared/resource.service';\nimport { WorkflowService } from '../../workflow/shared/workflow.service';\nimport { HelperService } from '../../shared/helper.service';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\n@Component({\n selector: 'hi-resource-list',\n templateUrl: './resource-list.component.html',\n styleUrls: ['./resource-list.component.scss'],\n providers: [WorkflowService],\n})\nexport class ResourceListComponent implements OnInit {\n @ViewChild('resourcesTable', { static: false })\n table: DatatableComponent;\n\n isForInstance = false;\n headerHeight = Settings.tableHeaderHeight;\n rowHeight = Settings.tableRowHeight;\n resources: Resource[];\n isLoading = true;\n clusterName: string;\n instanceName: string;\n sorts = [\n { prop: 'alive', dir: 'asc' },\n { prop: 'name', dir: 'asc' },\n ];\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private service: ResourceService,\n private workflowService: WorkflowService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n if (this.route.parent) {\n if (this.route.snapshot.data.forInstance) {\n this.isForInstance = true;\n this.isLoading = true;\n this.clusterName = this.route.parent.snapshot.params.cluster_name;\n this.instanceName = this.route.parent.snapshot.params.instance_name;\n\n this.service\n .getAllOnInstance(this.clusterName, this.instanceName)\n .subscribe(\n (resources) => (this.resources = resources),\n (error) => console.log(error),\n () => (this.isLoading = false)\n );\n } else {\n this.route.parent.params.pipe(map((p) => p.name)).subscribe((name) => {\n this.clusterName = name;\n this.fetchResources();\n });\n }\n }\n }\n\n // since resource list contains also workflows and jobs\n // need to subtract them from original resource list\n // to obtain all jobs list, need to go through every workflow\n // and perform get request for each.\n // However, it has huge performance issue when there are thousands of\n // workflows. We are using a smart way here: to remove resources whose\n // prefix is a workflow name\n protected fetchResources() {\n this.isLoading = true;\n this.resources = null;\n\n this.workflowService.getAll(this.clusterName).subscribe(\n (workflows) => {\n this.service.getAll(this.clusterName).subscribe(\n (result) => {\n this.resources = _.differenceWith(\n result,\n workflows,\n (resource: Resource, prefix: string) =>\n _.startsWith(resource.name, prefix)\n );\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n },\n (error) => this.helper.showError(error)\n );\n }\n\n onSelect({ selected }) {\n const row = selected[0];\n\n if (this.isForInstance) {\n this.table.rowDetail.toggleExpandRow(row);\n } else {\n this.router.navigate([row.name], { relativeTo: this.route });\n }\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./resource-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowService",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 35,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowService",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <ngx-datatable\n #resourcesTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [footerHeight]=\"rowHeight\"\n [rows]=\"resources\"\n selectionType=\"single\"\n [sorts]=\"sorts\"\n [loadingIndicator]=\"isLoading\"\n (select)=\"onSelect($event)\"\n >\n <ngx-datatable-column\n *ngIf=\"!isForInstance\"\n name=\"Status\"\n prop=\"alive\"\n [width]=\"88\"\n [resizeable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-value=\"value\" ngx-datatable-cell-template>\n <mat-icon *ngIf=\"value\" color=\"primary\">lens</mat-icon>\n <mat-icon\n *ngIf=\"!value\"\n color=\"warn\"\n matTooltip=\"The resource is offline.\"\n >panorama_fish_eye</mat-icon\n >\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column\n *ngIf=\"isForInstance\"\n [width]=\"50\"\n [resizeable]=\"false\"\n [sortable]=\"false\"\n [draggable]=\"false\"\n [canAutoResize]=\"false\"\n >\n <ng-template let-expanded=\"expanded\" ngx-datatable-cell-template>\n <mat-icon>{{ expanded ? 'expand_more' : 'chevron_right' }}</mat-icon>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column name=\"Name\"></ngx-datatable-column>\n <ngx-datatable-row-detail rowHeight=\"auto\">\n <ng-template let-row=\"row\" ngx-datatable-row-detail-template>\n <hi-resource-detail-for-instance\n [clusterName]=\"clusterName\"\n [instanceName]=\"instanceName\"\n [resourceName]=\"row.name\"\n >\n </hi-resource-detail-for-instance>\n </ng-template>\n </ngx-datatable-row-detail>\n </ngx-datatable>\n</section>\n"
},
{
"name": "ResourceNodeViewerComponent",
"id": "component-ResourceNodeViewerComponent-f044ade5926fa1e732b9f9a80e52be87d3517c472cc2549a1f057da78412af86454b311e4b823b495e0a0974605438fa4002a81486931968b54dce33147bddfb",
"file": "src/app/resource/resource-node-viewer/resource-node-viewer.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-resource-node-viewer",
"styleUrls": [
"./resource-node-viewer.component.scss"
],
"styles": [],
"templateUrl": [
"./resource-node-viewer.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 17
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 16
},
{
"name": "obj",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 21
},
{
"name": "path",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 20
},
{
"name": "resource",
"deprecated": false,
"deprecationMessage": "",
"type": "Resource",
"optional": false,
"description": "",
"line": 19
},
{
"name": "resourceName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 18
}
],
"methodsClass": [
{
"name": "loadResource",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 42,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 29,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport * as _ from 'lodash';\n\nimport { Resource } from '../shared/resource.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ResourceService } from '../shared/resource.service';\n\n@Component({\n selector: 'hi-resource-node-viewer',\n templateUrl: './resource-node-viewer.component.html',\n styleUrls: ['./resource-node-viewer.component.scss'],\n})\nexport class ResourceNodeViewerComponent implements OnInit {\n isLoading = true;\n clusterName: string;\n resourceName: string;\n resource: Resource;\n path: string;\n obj: any;\n\n constructor(\n protected route: ActivatedRoute,\n protected service: ResourceService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n if (this.route.snapshot.data.path) {\n this.path = this.route.snapshot.data.path;\n }\n\n if (this.route.parent) {\n this.clusterName = this.route.parent.snapshot.params.cluster_name;\n this.resourceName = this.route.parent.snapshot.params.resource_name;\n\n this.loadResource();\n }\n }\n\n protected loadResource() {\n this.isLoading = true;\n this.service.get(this.clusterName, this.resourceName).subscribe(\n (resource) => {\n this.resource = resource;\n this.obj = _.get(this.resource, this.path);\n },\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "",
"styleUrl": "./resource-node-viewer.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 21,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "ResourceService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section>\n <hi-node-viewer [loadingIndicator]=\"isLoading\" [obj]=\"obj\"> </hi-node-viewer>\n</section>\n"
},
{
"name": "StateLabelComponent",
"id": "component-StateLabelComponent-3668b7fc81861c7916c3dad02f2e1c54061a6ec5502f0d434eeb3e15098241481cb3d9bf6fbeb92f90115678f76f26e8414be27290b0eaacf21aa2deae730afc",
"file": "src/app/shared/state-label/state-label.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-state-label",
"styleUrls": [
"./state-label.component.scss"
],
"styles": [],
"templateUrl": [
"./state-label.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "isReady",
"deprecated": false,
"deprecationMessage": "",
"line": 10,
"type": "boolean",
"decorators": []
},
{
"name": "state",
"deprecated": false,
"deprecationMessage": "",
"line": 9,
"type": "string",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [],
"methodsClass": [
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 14,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'hi-state-label',\n templateUrl: './state-label.component.html',\n styleUrls: ['./state-label.component.scss'],\n})\nexport class StateLabelComponent implements OnInit {\n @Input() state: string;\n @Input() isReady: boolean;\n\n constructor() {}\n\n ngOnInit() {}\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.state-label {\n font-size: 12px;\n padding: 4px;\n border-radius: 6px;\n border: 1px solid rgb(0, 0, 0);\n margin-right: 10px;\n}\n\n.state-label-ready {\n border-color: mat.get-color-from-palette(\n mat.define-palette(mat.$blue-palette),\n darker\n );\n}\n\n.state-label-not-ready {\n border-color: mat.get-color-from-palette(\n mat.define-palette(mat.$grey-palette, 900, 900, 900),\n darker\n );\n}\n",
"styleUrl": "./state-label.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [],
"line": 10
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<span\n [ngClass]=\"{\n 'state-label': true,\n 'state-label-ready': isReady,\n 'state-label-not-ready': isReady == false\n }\"\n>\n {{ state || 'NO STATE' }}\n</span>\n"
},
{
"name": "WorkflowDagComponent",
"id": "component-WorkflowDagComponent-797e158a7f7704c46df625b696ee8fdbbf4034825918a55010aa161276ce1bb493cc34094ccf239527c0e96e22bff990195dc665bcb028c2eca0b38ccc75e2f5",
"file": "src/app/workflow/workflow-dag/workflow-dag.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-workflow-dag",
"styleUrls": [
"./workflow-dag.component.scss"
],
"styles": [],
"templateUrl": [
"./workflow-dag.component.html"
],
"viewProviders": [],
"inputsClass": [
{
"name": "workflow",
"deprecated": false,
"deprecationMessage": "",
"line": 22,
"type": "Workflow",
"decorators": []
}
],
"outputsClass": [],
"propertiesClass": [
{
"name": "curve",
"defaultValue": "shape.curveLinear",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"optional": false,
"description": "",
"line": 23
},
{
"name": "data",
"defaultValue": "{\n nodes: [],\n links: [],\n }",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 25
},
{
"name": "graph",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 32,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'graph', {static: true}"
}
]
},
{
"name": "jobNameToId",
"defaultValue": "{}",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"optional": false,
"description": "",
"line": 29
},
{
"name": "view",
"defaultValue": "[800, 600]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 24
}
],
"methodsClass": [
{
"name": "loadJobs",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 45,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngAfterViewInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 40,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 36,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import {\n Component,\n OnInit,\n Input,\n ElementRef,\n AfterViewInit,\n ViewChild,\n} from '@angular/core';\n\nimport * as shape from 'd3-shape';\nimport * as _ from 'lodash';\n\nimport { Workflow, Job } from '../shared/workflow.model';\n\n@Component({\n selector: 'hi-workflow-dag',\n templateUrl: './workflow-dag.component.html',\n styleUrls: ['./workflow-dag.component.scss'],\n})\nexport class WorkflowDagComponent implements OnInit, AfterViewInit {\n @Input()\n workflow: Workflow;\n curve: any = shape.curveLinear;\n view = [800, 600];\n data = {\n nodes: [],\n links: [],\n };\n jobNameToId = {};\n\n @ViewChild('graph', { static: true })\n graph;\n\n constructor(protected el: ElementRef) {}\n\n ngOnInit() {\n this.loadJobs();\n }\n\n ngAfterViewInit() {\n // console.log(this.el);\n // console.log(this.graph);\n }\n\n protected loadJobs() {\n // process nodes\n _.forEach(this.workflow.jobs, (job: Job) => {\n const newId = (this.data.nodes.length + 1).toString();\n\n this.data.nodes.push({\n id: newId,\n label: job.name,\n description: job.rawName,\n state: job.state,\n });\n this.jobNameToId[job.name] = newId;\n });\n\n // process edges/links\n _.forEach(this.workflow.jobs, (job: Job) => {\n _.forEach(job.parents, (parentName) => {\n this.data.links.push({\n source: this.jobNameToId[parentName],\n target: this.jobNameToId[job.name],\n });\n });\n });\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.state-default {\n fill: mat.get-color-from-palette(\n mat.define-palette(mat.$deep-orange-palette)\n );\n}\n\n.state-COMPLETED {\n fill: mat.get-color-from-palette(mat.define-palette(mat.$green-palette));\n}\n\n.state-PENDING {\n fill: mat.get-color-from-palette(mat.define-palette(mat.$grey-palette));\n}\n",
"styleUrl": "./workflow-dag.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "el",
"type": "ElementRef",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 32,
"jsdoctags": [
{
"name": "el",
"type": "ElementRef",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit",
"AfterViewInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<ngx-graph\n #graph\n class=\"chart-container\"\n [view]=\"[(graph.graphDims.width * 2) / 3, graph.graphDims.height]\"\n [links]=\"data.links\"\n [nodes]=\"data.nodes\"\n [curve]=\"curve\"\n orientation=\"TB\"\n [autoZoom]=\"false\"\n [panningEnabled]=\"false\"\n [draggingEnabled]=\"false\"\n [minZoomLevel]=\"1\"\n [maxZoomLevel]=\"1\"\n>\n <ng-template #defsTemplate>\n <svg:marker\n id=\"arrow\"\n viewBox=\"0 -5 10 10\"\n refX=\"8\"\n refY=\"0\"\n markerWidth=\"4\"\n markerHeight=\"4\"\n orient=\"auto\"\n >\n <svg:path d=\"M0,-5L10,0L0,5\" class=\"arrow-head\" />\n </svg:marker>\n </ng-template>\n\n <ng-template #nodeTemplate let-node>\n <svg:g\n class=\"node\"\n ngx-tooltip\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"node.description\"\n >\n <svg:rect\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n [attr.fill]=\"node.options.color\"\n />\n <svg:text\n alignment-baseline=\"central\"\n [attr.x]=\"10\"\n [attr.y]=\"node.height / 2\"\n >\n {{ node.label }}\n </svg:text>\n <svg:text\n alignment-baseline=\"hanging\"\n [attr.x]=\"node.width - 100\"\n [attr.y]=\"node.height + 10\"\n [ngClass]=\"'state-default state-' + node.state\"\n >\n {{ node.state }}\n </svg:text>\n </svg:g>\n </ng-template>\n\n <ng-template #linkTemplate let-link>\n <svg:g class=\"edge\">\n <svg:path\n class=\"line\"\n stroke-width=\"2\"\n marker-end=\"url(#arrow)\"\n ></svg:path>\n <svg:text class=\"edge-label\" text-anchor=\"middle\">\n <textPath\n class=\"text-path\"\n [attr.href]=\"'#' + link.id\"\n [style.dominant-baseline]=\"link.dominantBaseline\"\n startOffset=\"50%\"\n >\n {{ link.label }}\n </textPath>\n </svg:text>\n </svg:g>\n </ng-template>\n</ngx-graph>\n"
},
{
"name": "WorkflowDetailComponent",
"id": "component-WorkflowDetailComponent-a14d691f9025248b8a90caf85434206ba4bd5070c82766590e0c2ddfbf9e1d346d3a2743fd73b5a535008b1f3bc92164480cd56f3a015a4be1a0872017284084",
"file": "src/app/workflow/workflow-detail/workflow-detail.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-workflow-detail",
"styleUrls": [
"./workflow-detail.component.scss"
],
"styles": [],
"templateUrl": [
"./workflow-detail.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "can",
"defaultValue": "false",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 18
},
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 16
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 14
},
{
"name": "workflow",
"deprecated": false,
"deprecationMessage": "",
"type": "Workflow",
"optional": false,
"description": "",
"line": 15
},
{
"name": "workflowName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 17
}
],
"methodsClass": [
{
"name": "loadWorkflow",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 55,
"deprecated": false,
"deprecationMessage": "",
"modifierKind": [
122
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 26,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "resumeWorkflow",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 45,
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "stopWorkflow",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 35,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Workflow } from '../shared/workflow.model';\nimport { WorkflowService } from '../shared/workflow.service';\nimport { HelperService } from '../../shared/helper.service';\n\n@Component({\n selector: 'hi-workflow-detail',\n templateUrl: './workflow-detail.component.html',\n styleUrls: ['./workflow-detail.component.scss'],\n})\nexport class WorkflowDetailComponent implements OnInit {\n isLoading = true;\n workflow: Workflow;\n clusterName: string;\n workflowName: string;\n can = false;\n\n constructor(\n protected route: ActivatedRoute,\n protected service: WorkflowService,\n protected helper: HelperService\n ) {}\n\n ngOnInit() {\n this.clusterName = this.route.snapshot.params['cluster_name'];\n this.workflowName = this.route.snapshot.params['workflow_name'];\n\n this.service.can().subscribe((data) => (this.can = data));\n\n this.loadWorkflow();\n }\n\n stopWorkflow() {\n this.service.stop(this.clusterName, this.workflowName).subscribe(\n () => {\n this.helper.showSnackBar('Pause command sent.');\n this.loadWorkflow();\n },\n (error) => this.helper.showError(error)\n );\n }\n\n resumeWorkflow() {\n this.service.resume(this.clusterName, this.workflowName).subscribe(\n () => {\n this.helper.showSnackBar('Resume command sent.');\n this.loadWorkflow();\n },\n (error) => this.helper.showError(error)\n );\n }\n\n protected loadWorkflow() {\n this.isLoading = true;\n this.service.get(this.clusterName, this.workflowName).subscribe(\n (workflow) => (this.workflow = workflow),\n (error) => this.helper.showError(error),\n () => (this.isLoading = false)\n );\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": "@use '@angular/material' as mat;\n\n.content {\n padding: 20px;\n}\n\n.state-default {\n color: mat.get-color-from-palette(\n mat.define-palette(mat.$deep-orange-palette)\n );\n}\n\n.state-COMPLETED {\n color: mat.get-color-from-palette(mat.define-palette(mat.$green-palette));\n}\n\n.state-PENDING {\n color: mat.get-color-from-palette(mat.define-palette(mat.$grey-palette));\n}\n",
"styleUrl": "./workflow-detail.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "service",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 18,
"jsdoctags": [
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "service",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "helper",
"type": "HelperService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<mat-toolbar class=\"mat-elevation-z1\">\n <mat-toolbar-row>\n <hi-detail-header\n [cluster]=\"clusterName\"\n [workflow]=\"workflow?.name\"\n ></hi-detail-header>\n <hi-disabled-label\n *ngIf=\"!isLoading && workflow.state !== 'IN_PROGRESS'\"\n [text]=\"workflow.state\"\n ></hi-disabled-label>\n </mat-toolbar-row>\n <mat-toolbar-row class=\"information\">\n <a mat-mini-fab routerLink=\"../\"><mat-icon>arrow_back</mat-icon></a>\n <hi-key-value-pairs [obj]=\"workflow\">\n <hi-key-value-pair\n name=\"Capacity\"\n prop=\"config.capacity\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Target State\"\n prop=\"config.TargetState\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Terminable\"\n prop=\"config.Terminable\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Parallel Jobs\"\n prop=\"config.ParallelJobs\"\n ></hi-key-value-pair>\n <hi-key-value-pair\n name=\"Failure Threshold\"\n prop=\"config.FailureThreshold\"\n ></hi-key-value-pair>\n <hi-key-value-pair name=\"Expiry\" prop=\"config.Expiry\"></hi-key-value-pair>\n </hi-key-value-pairs>\n <span fxFlex=\"1 1 auto\"></span>\n <button mat-mini-fab *ngIf=\"can\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>menu</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"stopWorkflow()\">\n <mat-icon>pause_circle_outline</mat-icon>\n <span>Pause this Workflow</span>\n </button>\n <button mat-menu-item (click)=\"resumeWorkflow()\">\n <mat-icon>play_circle_outline</mat-icon>\n <span>Resume this workflow</span>\n </button>\n </mat-menu>\n </mat-toolbar-row>\n</mat-toolbar>\n<section fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <section\n *ngIf=\"!isLoading\"\n class=\"content\"\n fxLayout=\"column\"\n fxLayoutAlign=\"center center\"\n fxLayoutGap=\"10px\"\n fxFlexFill\n >\n <mat-button-toggle-group\n #group=\"matButtonToggleGroup\"\n [value]=\"'list'\"\n >\n <mat-button-toggle *ngIf=\"!workflow.isJobQueue\" value=\"graph\">\n Graph View\n </mat-button-toggle>\n <mat-button-toggle value=\"list\"> List View </mat-button-toggle>\n <mat-button-toggle value=\"json\"> JSON View </mat-button-toggle>\n </mat-button-toggle-group>\n <section\n class=\"viewer\"\n [ngSwitch]=\"group.value\"\n fxLayout=\"column\"\n fxLayoutAlign=\"center center\"\n fxFill\n >\n <hi-workflow-dag\n *ngSwitchCase=\"'graph'\"\n [workflow]=\"workflow\"\n ></hi-workflow-dag>\n <hi-job-list\n *ngSwitchCase=\"'list'\"\n [jobs]=\"workflow.jobs\"\n fxFill\n ></hi-job-list>\n <ngx-json-viewer\n *ngSwitchCase=\"'json'\"\n [json]=\"workflow.json\"\n fxFill\n ></ngx-json-viewer>\n </section>\n </section>\n</section>\n"
},
{
"name": "WorkflowListComponent",
"id": "component-WorkflowListComponent-eaf68edab8edbd12866f53e04eeee1fa5bb569710a581bcb44ee52e323af8e00fb81c5a4f81cbb51e0597bc48b1d21a6d324d0b79ed54b96cb2047b12e635a29",
"file": "src/app/workflow/workflow-list/workflow-list.component.ts",
"encapsulation": [],
"entryComponents": [],
"inputs": [],
"outputs": [],
"providers": [],
"selector": "hi-workflow-list",
"styleUrls": [
"./workflow-list.component.scss"
],
"styles": [],
"templateUrl": [
"./workflow-list.component.html"
],
"viewProviders": [],
"inputsClass": [],
"outputsClass": [],
"propertiesClass": [
{
"name": "clusterName",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"optional": false,
"description": "",
"line": 22
},
{
"name": "headerHeight",
"defaultValue": "Settings.tableHeaderHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 25
},
{
"name": "isLoading",
"defaultValue": "true",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 21
},
{
"name": "rowHeight",
"defaultValue": "Settings.tableRowHeight",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"optional": false,
"description": "",
"line": 26
},
{
"name": "sorts",
"defaultValue": "[{ prop: 'name', dir: 'asc' }]",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"optional": false,
"description": "",
"line": 28
},
{
"name": "table",
"deprecated": false,
"deprecationMessage": "",
"type": "DatatableComponent",
"optional": false,
"description": "",
"line": 19,
"decorators": [
{
"name": "ViewChild",
"stringifiedArguments": "'workflowsTable', {static: false}"
}
]
},
{
"name": "workflowRows",
"deprecated": false,
"deprecationMessage": "",
"type": "WorkflowRow[]",
"optional": false,
"description": "",
"line": 23
}
],
"methodsClass": [
{
"name": "checkSelectable",
"args": [
{
"name": "_event",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"optional": false,
"returnType": "boolean",
"typeParameters": [],
"line": 65,
"deprecated": false,
"deprecationMessage": "",
"jsdoctags": [
{
"name": "_event",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
{
"name": "ngOnInit",
"args": [],
"optional": false,
"returnType": "void",
"typeParameters": [],
"line": 36,
"deprecated": false,
"deprecationMessage": ""
}
],
"deprecated": false,
"deprecationMessage": "",
"hostBindings": [],
"hostListeners": [],
"description": "",
"rawdescription": "\n",
"type": "component",
"sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { WorkflowService } from '../shared/workflow.service';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\ntype WorkflowRow = {\n name: string;\n};\n\n@Component({\n selector: 'hi-workflow-list',\n templateUrl: './workflow-list.component.html',\n styleUrls: ['./workflow-list.component.scss'],\n})\nexport class WorkflowListComponent implements OnInit {\n @ViewChild('workflowsTable', { static: false })\n table: DatatableComponent;\n\n isLoading = true;\n clusterName: string;\n workflowRows: WorkflowRow[];\n\n headerHeight = Settings.tableHeaderHeight;\n rowHeight = Settings.tableRowHeight;\n\n sorts = [{ prop: 'name', dir: 'asc' }];\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private workflowService: WorkflowService\n ) {}\n\n ngOnInit() {\n if (this.route.parent) {\n this.isLoading = true;\n this.clusterName = this.route.parent.snapshot.params['name'];\n\n this.workflowService.getAll(this.clusterName).subscribe(\n (workflows) => {\n this.workflowRows = workflows.map((workflowName) => {\n return {\n name: workflowName,\n };\n });\n },\n (error) => {\n // since rest API simply throws 404 instead of empty config when config is not initialized yet\n // frontend has to treat 404 as normal result\n if (error != 'Not Found') {\n console.error(error);\n }\n this.isLoading = false;\n },\n () => (this.isLoading = false)\n );\n }\n }\n\n // Disable table row selection using the\n // selectCheck option of the\n // <ngx-datatable></ngx-datatable> element\n checkSelectable(_event) {\n return false;\n }\n}\n",
"assetsDirs": [],
"styleUrlsData": [
{
"data": ".empty {\n padding: 20px;\n}\n",
"styleUrl": "./workflow-list.component.scss"
}
],
"stylesData": "",
"constructorObj": {
"name": "constructor",
"description": "",
"deprecated": false,
"deprecationMessage": "",
"args": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": ""
},
{
"name": "workflowService",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": ""
}
],
"line": 28,
"jsdoctags": [
{
"name": "router",
"type": "Router",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "route",
"type": "ActivatedRoute",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
},
{
"name": "workflowService",
"type": "WorkflowService",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
},
"implements": [
"OnInit"
],
"templateData": "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one\n ~ or more contributor license agreements. See the NOTICE file\n ~ distributed with this work for additional information\n ~ regarding copyright ownership. The ASF licenses this file\n ~ to you under the Apache License, Version 2.0 (the\n ~ \"License\"); you may not use this file except in compliance\n ~ with the License. You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing,\n ~ software distributed under the License is distributed on an\n ~ \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n ~ KIND, either express or implied. See the License for the\n ~ specific language governing permissions and limitations\n ~ under the License.\n -->\n\n<section fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\n <section fxFlexFill>\n <section *ngIf=\"!isLoading && workflowRows.length == 0\" class=\"empty\">\n There's no workflow here.\n </section>\n <section>\n <ngx-datatable\n #workflowsTable\n class=\"material\"\n [headerHeight]=\"headerHeight\"\n [rowHeight]=\"rowHeight\"\n columnMode=\"force\"\n [footerHeight]=\"rowHeight\"\n [rows]=\"workflowRows\"\n [sorts]=\"sorts\"\n [limit]=\"20\"\n [selectCheck]=\"checkSelectable\"\n >\n <ngx-datatable-column\n name=\"Workflow ID\"\n prop=\"name\"\n [resizeable]=\"true\"\n [sortable]=\"true\"\n [draggable]=\"false\"\n [canAutoResize]=\"true\"\n >\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <a routerLink=\"{{row.name}}\">{{row.name}}</a>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-row-detail rowHeight=\"auto\">\n <ng-template let-row=\"row\" ngx-datatable-row-detail-template>\n </ng-template>\n </ngx-datatable-row-detail>\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSize=\"pageSize\"\n let-curPage=\"curPage\"\n >\n <section\n class=\"footer\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-between center\"\n >\n <section>{{ rowCount }} total</section>\n <section>\n <datatable-pager\n [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\n [pagerRightArrowIcon]=\"'datatable-icon-right'\"\n [pagerPreviousIcon]=\"'datatable-icon-prev'\"\n [pagerNextIcon]=\"'datatable-icon-skip'\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n [hidden]=\"!(rowCount / pageSize > 1)\"\n (change)=\"workflowsTable.onFooterPage($event)\"\n >\n </datatable-pager>\n </section>\n </section>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </section>\n </section>\n</section>\n"
}
],
"modules": [
{
"name": "AppModule",
"id": "module-AppModule-00115ad779e30a3f298b926bdfee0b0231dab37993f3d2fa69bdbbcd282df9abdc1459289cb6e34e22e0b1bc0d7a69a0bf8b2adfc07c8120b4640cbb5276f2c5",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/app.module.ts",
"methods": [],
"sourceCode": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\n\n// import { Angulartics2Module } from 'angulartics2';\n// import { Angulartics2Piwik } from 'angulartics2/piwik';\nimport { AppRoutingModule } from './app-routing.module';\nimport { CoreModule } from './core/core.module';\nimport { SharedModule } from './shared/shared.module';\nimport { ClusterModule } from './cluster/cluster.module';\nimport { ConfigurationModule } from './configuration/configuration.module';\nimport { InstanceModule } from './instance/instance.module';\nimport { ResourceModule } from './resource/resource.module';\nimport { ControllerModule } from './controller/controller.module';\nimport { HistoryModule } from './history/history.module';\nimport { AppComponent } from './app.component';\nimport { WorkflowModule } from './workflow/workflow.module';\nimport { ChooserModule } from './chooser/chooser.module';\nimport { DashboardModule } from './dashboard/dashboard.module';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [\n BrowserModule,\n FormsModule,\n HttpClientModule,\n AppRoutingModule,\n // Angulartics2Module.forRoot(),\n CoreModule,\n SharedModule,\n ClusterModule,\n ConfigurationModule,\n InstanceModule,\n ResourceModule,\n ControllerModule,\n HistoryModule,\n WorkflowModule,\n ChooserModule,\n DashboardModule,\n ],\n providers: [],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": [
{
"name": "AppComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "ChooserModule"
},
{
"name": "ClusterModule"
},
{
"name": "ConfigurationModule"
},
{
"name": "CoreModule"
},
{
"name": "DashboardModule"
},
{
"name": "HistoryModule"
},
{
"name": "InstanceModule"
},
{
"name": "ResourceModule"
},
{
"name": "SharedModule"
},
{
"name": "WorkflowModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": [
{
"name": "AppComponent"
}
]
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "ChooserModule",
"id": "module-ChooserModule-53d69d0f373712df08a9a12269682ed69ab67496c123c045e5397a3ef215a0b20c48f79928792550bb31a1371e253cfc03ed496ca03a5f8fde395481dedc78f5",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/chooser/chooser.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { ChooserService } from './shared/chooser.service';\nimport { HelixListComponent } from './helix-list/helix-list.component';\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [HelixListComponent],\n providers: [ChooserService],\n})\nexport class ChooserModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "ChooserService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "HelixListComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "ClusterModule",
"id": "module-ClusterModule-20fc81e0e913fd0da9a57fdc2994ac39bda50fc1dde5c4c4b73f51b6f87724897be405741f77c3ef21e8ee10e0de19d864ea2fcfed2816e0aca7576eb310d489",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/cluster/cluster.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { ClusterService } from './shared/cluster.service';\nimport { ClusterResolver } from './shared/cluster.resolver';\nimport { ClusterListComponent } from './cluster-list/cluster-list.component';\nimport { ClusterDetailComponent } from './cluster-detail/cluster-detail.component';\nimport { ClusterComponent } from './cluster.component';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, SharedModule],\n declarations: [\n ClusterListComponent,\n ClusterDetailComponent,\n ClusterComponent,\n ],\n providers: [ClusterService, ClusterResolver],\n exports: [ClusterListComponent, ClusterDetailComponent],\n})\nexport class ClusterModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "ClusterService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "ClusterComponent"
},
{
"name": "ClusterDetailComponent"
},
{
"name": "ClusterListComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": [
{
"name": "ClusterDetailComponent"
},
{
"name": "ClusterListComponent"
}
]
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "ConfigurationModule",
"id": "module-ConfigurationModule-6a7d32782cda718bbf1c50fb38dafb97f6cc1a7a04257080a990d1b76376989e55d975868c0ff68fa0929ec65748f3e5bc46b388fe3dbd033fae8a54cf0f21a5",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/configuration/configuration.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { ConfigDetailComponent } from './config-detail/config-detail.component';\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [ConfigDetailComponent],\n exports: [ConfigDetailComponent],\n})\nexport class ConfigurationModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": [
{
"name": "ConfigDetailComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": [
{
"name": "ConfigDetailComponent"
}
]
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "ControllerModule",
"id": "module-ControllerModule-4a07cbe7498b6c593705baa3f239f542d3f8ef86d23891bcb9c83cb06675e4cbf9126a23481172840989f7d319a7dd97d32b46a81b352856d27c520ef2fd7f71",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/controller/controller.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { ControllerDetailComponent } from './controller-detail/controller-detail.component';\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [ControllerDetailComponent],\n})\nexport class ControllerModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": [
{
"name": "ControllerDetailComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "CoreModule",
"id": "module-CoreModule-491f9be0219c8cc1bba70d3348d15babc1e3c2a4736fcb79dba92665a5db542ec836c3a5d9452d2da15e693c65c92ca8358022e7e19afcd6d0e7e20560d83074",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/core/core.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n})\nexport class CoreModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": []
},
{
"type": "imports",
"elements": []
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "DashboardModule",
"id": "module-DashboardModule-e2ef52cd945b4e54265cb6d5194eb22ecbb6e9dd4e01e8211347d7b9fb8c84d7515a74ffef09e7931ef500f5dd456b3d879c69d892af3db652a144ac0f7d585d",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/dashboard/dashboard.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { VisModule } from 'ngx-vis';\nimport { NgxChartsModule } from '@swimlane/ngx-charts';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { DashboardComponent } from './dashboard.component';\n\n@NgModule({\n imports: [CommonModule, SharedModule, VisModule, NgxChartsModule],\n declarations: [DashboardComponent],\n})\nexport class DashboardModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": [
{
"name": "DashboardComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "HistoryModule",
"id": "module-HistoryModule-7fcd15766edbbe583f7296fbadf420286043f9f992f54c4a6bd459c9a0a390d52da0660c6b21e1ec2c503380e59e6e8e58bfd13b1ed5e8c38f47f403a9cbe9a3",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/history/history.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\nimport { ClipboardModule } from 'ngx-clipboard';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { HistoryListComponent } from './history-list/history-list.component';\n\n@NgModule({\n imports: [CommonModule, NgxDatatableModule, ClipboardModule, SharedModule],\n declarations: [HistoryListComponent],\n})\nexport class HistoryModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": [
{
"name": "HistoryListComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "InstanceModule",
"id": "module-InstanceModule-e64f5c82060cbce58269ff82020d26ae6f22a0aa703dd6e30e34ae17f615964c3419dc7de90bc80753e8d8ae1be707d5d77fe792a85c0c098e8344c8f7e13aa9",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/instance/instance.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { InstanceService } from './shared/instance.service';\nimport { InstanceListComponent } from './instance-list/instance-list.component';\nimport { InstanceDetailComponent } from './instance-detail/instance-detail.component';\n\n@NgModule({\n imports: [CommonModule, NgxDatatableModule, SharedModule],\n declarations: [InstanceListComponent, InstanceDetailComponent],\n providers: [InstanceService],\n})\nexport class InstanceModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "InstanceService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "InstanceDetailComponent"
},
{
"name": "InstanceListComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "MaterialModule",
"id": "module-MaterialModule-65ee26417b707ee35c8c05c971669398b513f5d6f1fdcfb539e6636dbfe934d88a4f98cf166457dd780cd5b1b49bb4ee07ddf5b39be8732237a04bc11bcef7e6",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/shared/material.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\n\n@NgModule({\n imports: [\n BrowserAnimationsModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatCardModule,\n MatCheckboxModule,\n MatToolbarModule,\n MatTooltipModule,\n MatDialogModule,\n MatSnackBarModule,\n MatSlideToggleModule,\n MatInputModule,\n MatIconModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSidenavModule,\n MatListModule,\n MatMenuModule,\n MatTabsModule,\n MatExpansionModule,\n ],\n exports: [\n BrowserAnimationsModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatCardModule,\n MatCheckboxModule,\n MatToolbarModule,\n MatTooltipModule,\n MatDialogModule,\n MatSnackBarModule,\n MatSlideToggleModule,\n MatInputModule,\n MatIconModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSidenavModule,\n MatListModule,\n MatMenuModule,\n MatTabsModule,\n MatExpansionModule,\n ],\n})\nexport class MaterialModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": []
},
{
"type": "imports",
"elements": []
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "ResourceModule",
"id": "module-ResourceModule-eceaee213440bf988e009aab19d868921a35f5fa5bb2c9df806a47ea6ea094f137bcfc98bac502a02855920bae3dadfeeb48f620c1f1b3f1ddf8be8d5d262a8b",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/resource/resource.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { ResourceService } from './shared/resource.service';\nimport { ResourceResolver } from './shared/resource.resolver';\nimport { ResourceListComponent } from './resource-list/resource-list.component';\nimport { ResourceDetailComponent } from './resource-detail/resource-detail.component';\nimport { ResourceDetailForInstanceComponent } from './resource-detail-for-instance/resource-detail-for-instance.component';\nimport { PartitionListComponent } from './partition-list/partition-list.component';\nimport { PartitionDetailComponent } from './partition-detail/partition-detail.component';\nimport { ResourceNodeViewerComponent } from './resource-node-viewer/resource-node-viewer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n NgxDatatableModule,\n NgxJsonViewerModule,\n SharedModule,\n ],\n providers: [ResourceService, ResourceResolver],\n declarations: [\n ResourceListComponent,\n ResourceDetailComponent,\n ResourceDetailForInstanceComponent,\n PartitionListComponent,\n PartitionDetailComponent,\n ResourceNodeViewerComponent,\n ],\n})\nexport class ResourceModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "ResourceService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "PartitionDetailComponent"
},
{
"name": "PartitionListComponent"
},
{
"name": "ResourceDetailComponent"
},
{
"name": "ResourceDetailForInstanceComponent"
},
{
"name": "ResourceListComponent"
},
{
"name": "ResourceNodeViewerComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "SharedModule",
"id": "module-SharedModule-07d08216bfdcb1846358d47d243d79abe1940067b99e4620b47096c8dd704c4ec02f611c1a88e443809e418d41e861c48c8e069e2ad664c1d57c895e303dfdd8",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/shared/shared.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { AceEditorModule } from 'ng2-ace-editor';\n\nimport { MaterialModule } from './material.module';\nimport { HelperService } from './helper.service';\nimport { InputDialogComponent } from './dialog/input-dialog/input-dialog.component';\nimport { DetailHeaderComponent } from './detail-header/detail-header.component';\nimport {\n KeyValuePairDirective,\n KeyValuePairsComponent,\n} from './key-value-pairs/key-value-pairs.component';\nimport { JsonViewerComponent } from './json-viewer/json-viewer.component';\nimport { AlertDialogComponent } from './dialog/alert-dialog/alert-dialog.component';\nimport { StateLabelComponent } from './state-label/state-label.component';\nimport { NodeViewerComponent } from './node-viewer/node-viewer.component';\nimport { InputInlineComponent } from './input-inline/input-inline.component';\nimport { DataTableComponent } from './data-table/data-table.component';\nimport { ConfirmDialogComponent } from './dialog/confirm-dialog/confirm-dialog.component';\nimport { DisabledLabelComponent } from './disabled-label/disabled-label.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialModule,\n FlexLayoutModule,\n FormsModule,\n NgxDatatableModule,\n NgxJsonViewerModule,\n AceEditorModule,\n ],\n declarations: [\n InputDialogComponent,\n AlertDialogComponent,\n DetailHeaderComponent,\n KeyValuePairDirective,\n KeyValuePairsComponent,\n JsonViewerComponent,\n StateLabelComponent,\n NodeViewerComponent,\n InputInlineComponent,\n DataTableComponent,\n ConfirmDialogComponent,\n DisabledLabelComponent,\n ],\n exports: [\n RouterModule,\n MaterialModule,\n FlexLayoutModule,\n FormsModule,\n NgxJsonViewerModule,\n DetailHeaderComponent,\n KeyValuePairDirective,\n KeyValuePairsComponent,\n JsonViewerComponent,\n StateLabelComponent,\n NodeViewerComponent,\n DisabledLabelComponent,\n ],\n providers: [HelperService],\n})\nexport class SharedModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "HelperService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "AlertDialogComponent"
},
{
"name": "ConfirmDialogComponent"
},
{
"name": "DataTableComponent"
},
{
"name": "DetailHeaderComponent"
},
{
"name": "DisabledLabelComponent"
},
{
"name": "InputDialogComponent"
},
{
"name": "InputInlineComponent"
},
{
"name": "JsonViewerComponent"
},
{
"name": "KeyValuePairDirective"
},
{
"name": "KeyValuePairsComponent"
},
{
"name": "NodeViewerComponent"
},
{
"name": "StateLabelComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "MaterialModule"
}
]
},
{
"type": "exports",
"elements": [
{
"name": "DetailHeaderComponent"
},
{
"name": "DisabledLabelComponent"
},
{
"name": "JsonViewerComponent"
},
{
"name": "KeyValuePairDirective"
},
{
"name": "KeyValuePairsComponent"
},
{
"name": "MaterialModule"
},
{
"name": "NodeViewerComponent"
},
{
"name": "StateLabelComponent"
}
]
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "TestingModule",
"id": "module-TestingModule-0b0e48cee7c40f8e60a36fcdd76dad655b1cde790ae34ec5946a0cc6eadc48e9e05717aff6236714fec246ef2111b21cd9f212c1a9e9e7d02711154c76351bd6",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/testing/testing.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { MaterialModule } from '../app/shared/material.module';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { HelperService } from '../app/shared/helper.service';\nimport { HelperServiceStub } from './stubs';\n\n@NgModule({\n imports: [\n HttpClientModule,\n MaterialModule,\n RouterTestingModule,\n NoopAnimationsModule,\n ],\n providers: [\n {\n provide: HelperService,\n useValue: HelperServiceStub,\n },\n ],\n exports: [\n HttpClientModule,\n MaterialModule,\n RouterTestingModule,\n NoopAnimationsModule,\n ],\n})\nexport class TestingModule {}\n",
"children": [
{
"type": "providers",
"elements": []
},
{
"type": "declarations",
"elements": []
},
{
"type": "imports",
"elements": [
{
"name": "MaterialModule"
}
]
},
{
"type": "exports",
"elements": [
{
"name": "MaterialModule"
}
]
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
},
{
"name": "WorkflowModule",
"id": "module-WorkflowModule-e5885878f7308be21c393d3489b4876e80e02e204744631d7751191f875f9c7d7662b11ef38215101c57ab6cf0918e09f862529c3fb1030abd3b39643a3c7e9f",
"description": "",
"deprecationMessage": "",
"deprecated": false,
"file": "src/app/workflow/workflow.module.ts",
"methods": [],
"sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\nimport { NgxChartsModule } from '@swimlane/ngx-charts';\nimport { NgxGraphModule } from '@swimlane/ngx-graph';\n\nimport { WorkflowListComponent } from './workflow-list/workflow-list.component';\nimport { WorkflowService } from './shared/workflow.service';\nimport { JobService } from './shared/job.service';\nimport { SharedModule } from '../shared/shared.module';\nimport { WorkflowDetailComponent } from './workflow-detail/workflow-detail.component';\nimport { WorkflowDagComponent } from './workflow-dag/workflow-dag.component';\nimport { JobListComponent } from './job-list/job-list.component';\nimport { JobDetailComponent } from './job-detail/job-detail.component';\n\n@NgModule({\n imports: [\n CommonModule,\n SharedModule,\n NgxDatatableModule,\n NgxChartsModule,\n NgxGraphModule,\n ],\n providers: [WorkflowService, JobService],\n declarations: [\n WorkflowListComponent,\n WorkflowDetailComponent,\n WorkflowDagComponent,\n JobListComponent,\n JobDetailComponent,\n ],\n})\nexport class WorkflowModule {}\n",
"children": [
{
"type": "providers",
"elements": [
{
"name": "JobService"
},
{
"name": "WorkflowService"
}
]
},
{
"type": "declarations",
"elements": [
{
"name": "JobDetailComponent"
},
{
"name": "JobListComponent"
},
{
"name": "WorkflowDagComponent"
},
{
"name": "WorkflowDetailComponent"
},
{
"name": "WorkflowListComponent"
}
]
},
{
"type": "imports",
"elements": [
{
"name": "SharedModule"
}
]
},
{
"type": "exports",
"elements": []
},
{
"type": "bootstrap",
"elements": []
},
{
"type": "classes",
"elements": []
}
]
}
],
"miscellaneous": {
"variables": [
{
"name": "app",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/app.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "express()"
},
{
"name": "AppRoutingModule",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/app-routing.module.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "ModuleWithProviders<RouterModule>",
"defaultValue": "RouterModule.forRoot(HELIX_ROUTES, { relativeLinkResolution: 'legacy' })"
},
{
"name": "clusterName",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'cluster1'"
},
{
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"defaultValue": "{}",
"rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
"description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
},
{
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"defaultValue": "{}",
"rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
"description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
},
{
"name": "Default",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Delete",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Empty",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "environment",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/environments/environment.prod.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n production: true,\n}"
},
{
"name": "environment",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/environments/environment.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n production: false,\n piwik: {\n url: '//vxu-ld1.linkedin.biz/piwik/',\n id: '3',\n },\n}"
},
{
"name": "HELIX_ENDPOINTS",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n helix: [\n {\n default: 'http://localhost:8100/admin/v2',\n },\n ],\n}"
},
{
"name": "HELIX_ENDPOINTS",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n helix: [\n {\n default: 'http://localhost:8100/admin/v2',\n },\n ],\n}"
},
{
"name": "HelperServiceStub",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/testing/stubs.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n showError: (message: string) => {},\n showSnackBar: (message: string) => {},\n showConfirmation: (message: string): Promise<boolean> =>\n new Promise<boolean>((f) => f(false)),\n}"
},
{
"name": "IDENTITY_TOKEN_SOURCE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string | undefined",
"defaultValue": "undefined",
"rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
"description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
},
{
"name": "IDENTITY_TOKEN_SOURCE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string | undefined",
"defaultValue": "undefined",
"rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
"description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
},
{
"name": "LDAP",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n uri: 'ldap://example.com',\n base: 'DC=example,DC=com',\n principalSuffix: '@example.com',\n adminGroup: 'admin',\n}"
},
{
"name": "LDAP",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n uri: 'ldap://example.com',\n base: 'DC=example,DC=com',\n principalSuffix: '@example.com',\n adminGroup: 'admin',\n}"
},
{
"name": "Leader",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Loading",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Offline",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "server",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/app.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "http.createServer(app)"
},
{
"name": "SESSION_STORE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "undefined"
},
{
"name": "SESSION_STORE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "undefined"
},
{
"name": "SSL",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n port: 0,\n keyfile: '',\n certfile: '',\n passfile: '',\n cafiles: [],\n}"
},
{
"name": "SSL",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n port: 0,\n keyfile: '',\n certfile: '',\n passfile: '',\n cafiles: [],\n}"
},
{
"name": "Standby",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args: any) => ({\n props: {\n ...args,\n },\n template: `\n <hi-state-label [state]=\"state\" [isReady]=\"isReady\"></hi-state-label>\n `,\n})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args: any) => ({\n props: {\n ...args,\n },\n template: `\n <div>Workflow List</div>\n <span>There's no workflow here.</span>\n <hi-workflow-list [workflowRows]=\"workflowRows\" [clusterName]=\"clusterName\" [isLoading]=\"isLoading\"></hi-workflow-list>\n <router-outlet></router-outlet>\n`,\n})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args) => ({\n component: ConfirmDialogTestComponent,\n template: `<hi-confirm-dialog-test [data]=\"data\"></hi-confirm-dialog-test>`,\n props: {\n ...args,\n },\n})"
},
{
"name": "TOKEN_EXPIRATION_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'expires'",
"rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
"description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
},
{
"name": "TOKEN_EXPIRATION_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'expires'",
"rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
"description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
},
{
"name": "TOKEN_RESPONSE_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'token'",
"rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
"description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
},
{
"name": "TOKEN_RESPONSE_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'token'",
"rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
"description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
},
{
"name": "workflowRows",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"defaultValue": "[{ name: 'workflow1' }]"
}
],
"functions": [
{
"name": "setRoutes",
"file": "server/routes.ts",
"ctype": "miscellaneous",
"subtype": "function",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"args": [
{
"name": "app",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"jsdoctags": [
{
"name": "app",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
],
"typealiases": [
{
"name": "AgentOptions",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
},
{
"name": "HelixRequestOptions",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
},
{
"name": "IdealState",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "src/app/shared/node-viewer/node-viewer.component.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
},
{
"name": "WorkflowRow",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "src/app/workflow/workflow-list/workflow-list.component.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
}
],
"enumerations": [],
"groupedVariables": {
"server/app.ts": [
{
"name": "app",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/app.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "express()"
},
{
"name": "server",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/app.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "http.createServer(app)"
}
],
"src/app/app-routing.module.ts": [
{
"name": "AppRoutingModule",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/app-routing.module.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "ModuleWithProviders<RouterModule>",
"defaultValue": "RouterModule.forRoot(HELIX_ROUTES, { relativeLinkResolution: 'legacy' })"
}
],
"src/app/workflow/workflow-list/workflow-list.stories.ts": [
{
"name": "clusterName",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'cluster1'"
},
{
"name": "Default",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Empty",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Loading",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args: any) => ({\n props: {\n ...args,\n },\n template: `\n <div>Workflow List</div>\n <span>There's no workflow here.</span>\n <hi-workflow-list [workflowRows]=\"workflowRows\" [clusterName]=\"clusterName\" [isLoading]=\"isLoading\"></hi-workflow-list>\n <router-outlet></router-outlet>\n`,\n})"
},
{
"name": "workflowRows",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "[]",
"defaultValue": "[{ name: 'workflow1' }]"
}
],
"server/config.example.ts": [
{
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"defaultValue": "{}",
"rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
"description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
},
{
"name": "HELIX_ENDPOINTS",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n helix: [\n {\n default: 'http://localhost:8100/admin/v2',\n },\n ],\n}"
},
{
"name": "IDENTITY_TOKEN_SOURCE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string | undefined",
"defaultValue": "undefined",
"rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
"description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
},
{
"name": "LDAP",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n uri: 'ldap://example.com',\n base: 'DC=example,DC=com',\n principalSuffix: '@example.com',\n adminGroup: 'admin',\n}"
},
{
"name": "SESSION_STORE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "undefined"
},
{
"name": "SSL",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n port: 0,\n keyfile: '',\n certfile: '',\n passfile: '',\n cafiles: [],\n}"
},
{
"name": "TOKEN_EXPIRATION_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'expires'",
"rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
"description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
},
{
"name": "TOKEN_RESPONSE_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.example.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'token'",
"rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
"description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
}
],
"server/config.ts": [
{
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "any",
"defaultValue": "{}",
"rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
"description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
},
{
"name": "HELIX_ENDPOINTS",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n helix: [\n {\n default: 'http://localhost:8100/admin/v2',\n },\n ],\n}"
},
{
"name": "IDENTITY_TOKEN_SOURCE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string | undefined",
"defaultValue": "undefined",
"rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
"description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
},
{
"name": "LDAP",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n uri: 'ldap://example.com',\n base: 'DC=example,DC=com',\n principalSuffix: '@example.com',\n adminGroup: 'admin',\n}"
},
{
"name": "SESSION_STORE",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "undefined"
},
{
"name": "SSL",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n port: 0,\n keyfile: '',\n certfile: '',\n passfile: '',\n cafiles: [],\n}"
},
{
"name": "TOKEN_EXPIRATION_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'expires'",
"rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
"description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
},
{
"name": "TOKEN_RESPONSE_KEY",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "server/config.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "string",
"defaultValue": "'token'",
"rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
"description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
}
],
"src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts": [
{
"name": "Delete",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args) => ({\n component: ConfirmDialogTestComponent,\n template: `<hi-confirm-dialog-test [data]=\"data\"></hi-confirm-dialog-test>`,\n props: {\n ...args,\n },\n})"
}
],
"src/environments/environment.prod.ts": [
{
"name": "environment",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/environments/environment.prod.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n production: true,\n}"
}
],
"src/environments/environment.ts": [
{
"name": "environment",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/environments/environment.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n production: false,\n piwik: {\n url: '//vxu-ld1.linkedin.biz/piwik/',\n id: '3',\n },\n}"
}
],
"src/testing/stubs.ts": [
{
"name": "HelperServiceStub",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/testing/stubs.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "object",
"defaultValue": "{\n showError: (message: string) => {},\n showSnackBar: (message: string) => {},\n showConfirmation: (message: string): Promise<boolean> =>\n new Promise<boolean>((f) => f(false)),\n}"
}
],
"src/app/shared/state-label/state-label.stories.ts": [
{
"name": "Leader",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Offline",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Standby",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "",
"defaultValue": "Template.bind({})"
},
{
"name": "Template",
"ctype": "miscellaneous",
"subtype": "variable",
"file": "src/app/shared/state-label/state-label.stories.ts",
"deprecated": false,
"deprecationMessage": "",
"type": "Story",
"defaultValue": "(args: any) => ({\n props: {\n ...args,\n },\n template: `\n <hi-state-label [state]=\"state\" [isReady]=\"isReady\"></hi-state-label>\n `,\n})"
}
]
},
"groupedFunctions": {
"server/routes.ts": [
{
"name": "setRoutes",
"file": "server/routes.ts",
"ctype": "miscellaneous",
"subtype": "function",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"args": [
{
"name": "app",
"type": "",
"deprecated": false,
"deprecationMessage": ""
}
],
"jsdoctags": [
{
"name": "app",
"type": "",
"deprecated": false,
"deprecationMessage": "",
"tagName": {
"text": "param"
}
}
]
}
]
},
"groupedEnumerations": {},
"groupedTypeAliases": {
"server/controllers/d.ts": [
{
"name": "AgentOptions",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
},
{
"name": "HelixRequestOptions",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "server/controllers/d.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
}
],
"src/app/shared/node-viewer/node-viewer.component.ts": [
{
"name": "IdealState",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "src/app/shared/node-viewer/node-viewer.component.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
}
],
"src/app/workflow/workflow-list/workflow-list.component.ts": [
{
"name": "WorkflowRow",
"ctype": "miscellaneous",
"subtype": "typealias",
"rawtype": "literal type",
"file": "src/app/workflow/workflow-list/workflow-list.component.ts",
"deprecated": false,
"deprecationMessage": "",
"description": "",
"kind": 181
}
]
}
},
"routes": [],
"coverage": {
"count": 7,
"status": "low",
"files": [
{
"filePath": "server/app.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "app",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/app.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "server",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "HELIX_ENDPOINTS",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "IDENTITY_TOKEN_SOURCE",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "LDAP",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "SESSION_STORE",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "SSL",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "TOKEN_EXPIRATION_KEY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.example.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "TOKEN_RESPONSE_KEY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "HELIX_ENDPOINTS",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "IDENTITY_TOKEN_SOURCE",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "LDAP",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "SESSION_STORE",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "SSL",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "TOKEN_EXPIRATION_KEY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/config.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "TOKEN_RESPONSE_KEY",
"coveragePercent": 100,
"coverageCount": "1/1",
"status": "very-good"
},
{
"filePath": "server/controllers/d.ts",
"type": "interface",
"linktype": "interface",
"name": "HelixRequest",
"coveragePercent": 0,
"coverageCount": "0/2",
"status": "low"
},
{
"filePath": "server/controllers/d.ts",
"type": "interface",
"linktype": "interface",
"name": "HelixSession",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "server/controllers/helix.ts",
"type": "class",
"linktype": "classe",
"name": "HelixCtrl",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "server/controllers/user.ts",
"type": "class",
"linktype": "classe",
"name": "UserCtrl",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "server/routes.ts",
"type": "function",
"linktype": "miscellaneous",
"linksubtype": "function",
"name": "setRoutes",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/app-routing.module.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "AppRoutingModule",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/app.component.ts",
"type": "component",
"linktype": "component",
"name": "AppComponent",
"coveragePercent": 0,
"coverageCount": "0/8",
"status": "low"
},
{
"filePath": "src/app/chooser/helix-list/helix-list.component.ts",
"type": "component",
"linktype": "component",
"name": "HelixListComponent",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/chooser/shared/chooser.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "ChooserService",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/cluster/cluster-detail/cluster-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "ClusterDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/16",
"status": "low"
},
{
"filePath": "src/app/cluster/cluster-list/cluster-list.component.ts",
"type": "component",
"linktype": "component",
"name": "ClusterListComponent",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/cluster/cluster.component.ts",
"type": "component",
"linktype": "component",
"name": "ClusterComponent",
"coveragePercent": 0,
"coverageCount": "0/6",
"status": "low"
},
{
"filePath": "src/app/cluster/shared/cluster.model.ts",
"type": "class",
"linktype": "classe",
"name": "Cluster",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/cluster/shared/cluster.resolver.ts",
"type": "guard",
"linktype": "guard",
"name": "ClusterResolver",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/cluster/shared/cluster.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "ClusterService",
"coveragePercent": 0,
"coverageCount": "0/18",
"status": "low"
},
{
"filePath": "src/app/configuration/config-detail/config-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "ConfigDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/12",
"status": "low"
},
{
"filePath": "src/app/configuration/shared/configuration.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "ConfigurationService",
"coveragePercent": 0,
"coverageCount": "0/18",
"status": "low"
},
{
"filePath": "src/app/controller/controller-detail/controller-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "ControllerDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/6",
"status": "low"
},
{
"filePath": "src/app/controller/shared/controller.model.ts",
"type": "class",
"linktype": "classe",
"name": "Controller",
"coveragePercent": 0,
"coverageCount": "0/7",
"status": "low"
},
{
"filePath": "src/app/controller/shared/controller.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "ControllerService",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/core/helix.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "HelixService",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/core/settings.ts",
"type": "class",
"linktype": "classe",
"name": "Settings",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/core/user.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "UserService",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/dashboard/dashboard.component.ts",
"type": "component",
"linktype": "component",
"name": "DashboardComponent",
"coveragePercent": 0,
"coverageCount": "0/23",
"status": "low"
},
{
"filePath": "src/app/history/history-list/history-list.component.ts",
"type": "component",
"linktype": "component",
"name": "HistoryListComponent",
"coveragePercent": 0,
"coverageCount": "0/12",
"status": "low"
},
{
"filePath": "src/app/history/shared/history.model.ts",
"type": "class",
"linktype": "classe",
"name": "History",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/history/shared/history.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "HistoryService",
"coveragePercent": 0,
"coverageCount": "0/12",
"status": "low"
},
{
"filePath": "src/app/instance/instance-detail/instance-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "InstanceDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/13",
"status": "low"
},
{
"filePath": "src/app/instance/instance-list/instance-list.component.ts",
"type": "component",
"linktype": "component",
"name": "InstanceListComponent",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/instance/shared/instance.model.ts",
"type": "class",
"linktype": "classe",
"name": "Instance",
"coveragePercent": 0,
"coverageCount": "0/8",
"status": "low"
},
{
"filePath": "src/app/instance/shared/instance.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "InstanceService",
"coveragePercent": 0,
"coverageCount": "0/15",
"status": "low"
},
{
"filePath": "src/app/resource/partition-detail/partition-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "PartitionDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/7",
"status": "low"
},
{
"filePath": "src/app/resource/partition-list/partition-list.component.ts",
"type": "component",
"linktype": "component",
"name": "PartitionListComponent",
"coveragePercent": 0,
"coverageCount": "0/15",
"status": "low"
},
{
"filePath": "src/app/resource/resource-detail-for-instance/resource-detail-for-instance.component.ts",
"type": "component",
"linktype": "component",
"name": "ResourceDetailForInstanceComponent",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/resource/resource-detail/resource-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "ResourceDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/13",
"status": "low"
},
{
"filePath": "src/app/resource/resource-list/resource-list.component.ts",
"type": "component",
"linktype": "component",
"name": "ResourceListComponent",
"coveragePercent": 0,
"coverageCount": "0/14",
"status": "low"
},
{
"filePath": "src/app/resource/resource-node-viewer/resource-node-viewer.component.ts",
"type": "component",
"linktype": "component",
"name": "ResourceNodeViewerComponent",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/resource/shared/resource.model.ts",
"type": "class",
"linktype": "classe",
"name": "Partition",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "src/app/resource/shared/resource.model.ts",
"type": "class",
"linktype": "classe",
"name": "Resource",
"coveragePercent": 0,
"coverageCount": "0/13",
"status": "low"
},
{
"filePath": "src/app/resource/shared/resource.model.ts",
"type": "interface",
"linktype": "interface",
"name": "IReplica",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "src/app/resource/shared/resource.resolver.ts",
"type": "guard",
"linktype": "guard",
"name": "ResourceResolver",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/resource/shared/resource.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "ResourceService",
"coveragePercent": 0,
"coverageCount": "0/17",
"status": "low"
},
{
"filePath": "src/app/shared/data-table/data-table.component.ts",
"type": "component",
"linktype": "component",
"name": "DataTableComponent",
"coveragePercent": 0,
"coverageCount": "0/16",
"status": "low"
},
{
"filePath": "src/app/shared/detail-header/detail-header.component.ts",
"type": "component",
"linktype": "component",
"name": "DetailHeaderComponent",
"coveragePercent": 0,
"coverageCount": "0/9",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/alert-dialog/alert-dialog.component.ts",
"type": "component",
"linktype": "component",
"name": "AlertDialogComponent",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts",
"type": "component",
"linktype": "component",
"name": "ConfirmDialogTestComponent",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts",
"type": "component",
"linktype": "component",
"name": "ConfirmDialogComponent",
"coveragePercent": 0,
"coverageCount": "0/8",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Delete",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Template",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/shared/dialog/input-dialog/input-dialog.component.ts",
"type": "component",
"linktype": "component",
"name": "InputDialogComponent",
"coveragePercent": 0,
"coverageCount": "0/9",
"status": "low"
},
{
"filePath": "src/app/shared/disabled-label/disabled-label.component.ts",
"type": "component",
"linktype": "component",
"name": "DisabledLabelComponent",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "src/app/shared/helper.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "HelperService",
"coveragePercent": 0,
"coverageCount": "0/6",
"status": "low"
},
{
"filePath": "src/app/shared/input-inline/input-inline.component.ts",
"type": "component",
"linktype": "component",
"name": "InputInlineComponent",
"coveragePercent": 0,
"coverageCount": "0/31",
"status": "low"
},
{
"filePath": "src/app/shared/json-viewer/json-viewer.component.ts",
"type": "component",
"linktype": "component",
"name": "JsonViewerComponent",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "src/app/shared/key-value-pairs/key-value-pairs.component.ts",
"type": "component",
"linktype": "component",
"name": "KeyValuePairsComponent",
"coveragePercent": 0,
"coverageCount": "0/4",
"status": "low"
},
{
"filePath": "src/app/shared/key-value-pairs/key-value-pairs.component.ts",
"type": "directive",
"linktype": "directive",
"name": "KeyValuePairDirective",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/shared/models/node.model.ts",
"type": "class",
"linktype": "classe",
"name": "Node",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/shared/models/node.model.ts",
"type": "interface",
"linktype": "interface",
"name": "ListFieldObject",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/shared/models/node.model.ts",
"type": "interface",
"linktype": "interface",
"name": "MapFieldObject",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/shared/models/node.model.ts",
"type": "interface",
"linktype": "interface",
"name": "Payload",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/shared/models/node.model.ts",
"type": "interface",
"linktype": "interface",
"name": "SimpleFieldObject",
"coveragePercent": 0,
"coverageCount": "0/3",
"status": "low"
},
{
"filePath": "src/app/shared/node-viewer/node-viewer.component.ts",
"type": "component",
"linktype": "component",
"name": "NodeViewerComponent",
"coveragePercent": 0,
"coverageCount": "0/33",
"status": "low"
},
{
"filePath": "src/app/shared/state-label/state-label.component.ts",
"type": "component",
"linktype": "component",
"name": "StateLabelComponent",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/shared/state-label/state-label.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Leader",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/shared/state-label/state-label.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Offline",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/shared/state-label/state-label.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Standby",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/shared/state-label/state-label.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Template",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/job-detail/job-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "JobDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/5",
"status": "low"
},
{
"filePath": "src/app/workflow/job-list/job-list.component.ts",
"type": "component",
"linktype": "component",
"name": "JobListComponent",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/workflow/shared/job.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "JobService",
"coveragePercent": 0,
"coverageCount": "0/10",
"status": "low"
},
{
"filePath": "src/app/workflow/shared/workflow.model.ts",
"type": "class",
"linktype": "classe",
"name": "Job",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/workflow/shared/workflow.model.ts",
"type": "class",
"linktype": "classe",
"name": "Task",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/shared/workflow.model.ts",
"type": "class",
"linktype": "classe",
"name": "Workflow",
"coveragePercent": 0,
"coverageCount": "0/9",
"status": "low"
},
{
"filePath": "src/app/workflow/shared/workflow.service.ts",
"type": "injectable",
"linktype": "injectable",
"name": "WorkflowService",
"coveragePercent": 0,
"coverageCount": "0/13",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-dag/workflow-dag.component.ts",
"type": "component",
"linktype": "component",
"name": "WorkflowDagComponent",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-detail/workflow-detail.component.ts",
"type": "component",
"linktype": "component",
"name": "WorkflowDetailComponent",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.component.ts",
"type": "component",
"linktype": "component",
"name": "WorkflowListComponent",
"coveragePercent": 0,
"coverageCount": "0/11",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "clusterName",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Default",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Empty",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Loading",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "Template",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/app/workflow/workflow-list/workflow-list.stories.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "workflowRows",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/environments/environment.prod.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "environment",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/environments/environment.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "environment",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
},
{
"filePath": "src/testing/stubs.ts",
"type": "variable",
"linktype": "miscellaneous",
"linksubtype": "variable",
"name": "HelperServiceStub",
"coveragePercent": 0,
"coverageCount": "0/1",
"status": "low"
}
]
}
}