mirror of
https://github.com/nasa/openmct.git
synced 2025-04-26 13:59:50 +00:00
Fault management (#5212)
* Implements Fault Management Co-authored-by: Rukmini Bose <rukmini.bose15@gmail.com> Co-authored-by: Andrew Henry <akhenry@gmail.com> Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
This commit is contained in:
parent
aa0fc70e54
commit
05e3303828
83
example/faultManagment/exampleFaultSource.js
Normal file
83
example/faultManagment/exampleFaultSource.js
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
return function install(openmct) {
|
||||||
|
openmct.install(openmct.plugins.FaultManagement());
|
||||||
|
|
||||||
|
openmct.faults.addProvider({
|
||||||
|
request(domainObject, options) {
|
||||||
|
const faults = JSON.parse(localStorage.getItem('faults'));
|
||||||
|
|
||||||
|
return Promise.resolve(faults.alarms);
|
||||||
|
},
|
||||||
|
subscribe(domainObject, callback) {
|
||||||
|
const faultsData = JSON.parse(localStorage.getItem('faults')).alarms;
|
||||||
|
|
||||||
|
function getRandomIndex(start, end) {
|
||||||
|
return Math.floor(start + (Math.random() * (end - start + 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = setInterval(() => {
|
||||||
|
const index = getRandomIndex(0, faultsData.length - 1);
|
||||||
|
const randomFaultData = faultsData[index];
|
||||||
|
const randomFault = randomFaultData.fault;
|
||||||
|
randomFault.currentValueInfo.value = Math.random();
|
||||||
|
callback({
|
||||||
|
fault: randomFault,
|
||||||
|
type: 'alarms'
|
||||||
|
});
|
||||||
|
}, 300);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearInterval(id);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
supportsRequest(domainObject) {
|
||||||
|
const faults = localStorage.getItem('faults');
|
||||||
|
|
||||||
|
return faults && domainObject.type === 'faultManagement';
|
||||||
|
},
|
||||||
|
supportsSubscribe(domainObject) {
|
||||||
|
const faults = localStorage.getItem('faults');
|
||||||
|
|
||||||
|
return faults && domainObject.type === 'faultManagement';
|
||||||
|
},
|
||||||
|
acknowledgeFault(fault, { comment = '' }) {
|
||||||
|
console.log('acknowledgeFault', fault);
|
||||||
|
console.log('comment', comment);
|
||||||
|
|
||||||
|
return Promise.resolve({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
},
|
||||||
|
shelveFault(fault, shelveData) {
|
||||||
|
console.log('shelveFault', fault);
|
||||||
|
console.log('shelveData', shelveData);
|
||||||
|
|
||||||
|
return Promise.resolve({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
47
example/faultManagment/pluginSpec.js
Normal file
47
example/faultManagment/pluginSpec.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import {
|
||||||
|
createOpenMct,
|
||||||
|
resetApplicationState
|
||||||
|
} from '../../src/utils/testing';
|
||||||
|
|
||||||
|
describe("The Example Fault Source Plugin", () => {
|
||||||
|
let openmct;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
openmct = createOpenMct();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
return resetApplicationState(openmct);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('is not installed by default', () => {
|
||||||
|
expect(openmct.faults.provider).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can be installed', () => {
|
||||||
|
openmct.install(openmct.plugins.example.ExampleFaultSource());
|
||||||
|
expect(openmct.faults.provider).not.toBeUndefined();
|
||||||
|
});
|
||||||
|
});
|
@ -75,7 +75,6 @@
|
|||||||
const TWO_HOURS = ONE_HOUR * 2;
|
const TWO_HOURS = ONE_HOUR * 2;
|
||||||
const ONE_DAY = ONE_HOUR * 24;
|
const ONE_DAY = ONE_HOUR * 24;
|
||||||
|
|
||||||
|
|
||||||
openmct.install(openmct.plugins.LocalStorage());
|
openmct.install(openmct.plugins.LocalStorage());
|
||||||
|
|
||||||
openmct.install(openmct.plugins.example.Generator());
|
openmct.install(openmct.plugins.example.Generator());
|
||||||
@ -192,7 +191,7 @@
|
|||||||
openmct.install(openmct.plugins.ObjectMigration());
|
openmct.install(openmct.plugins.ObjectMigration());
|
||||||
openmct.install(openmct.plugins.ClearData(
|
openmct.install(openmct.plugins.ClearData(
|
||||||
['table', 'telemetry.plot.overlay', 'telemetry.plot.stacked', 'example.imagery'],
|
['table', 'telemetry.plot.overlay', 'telemetry.plot.stacked', 'example.imagery'],
|
||||||
{indicator: true}
|
{ indicator: true }
|
||||||
));
|
));
|
||||||
openmct.install(openmct.plugins.Clock({ enableClockIndicator: true }));
|
openmct.install(openmct.plugins.Clock({ enableClockIndicator: true }));
|
||||||
openmct.install(openmct.plugins.Timer());
|
openmct.install(openmct.plugins.Timer());
|
||||||
|
@ -238,6 +238,7 @@ define([
|
|||||||
this.priority = api.PriorityAPI;
|
this.priority = api.PriorityAPI;
|
||||||
|
|
||||||
this.router = new ApplicationRouter(this);
|
this.router = new ApplicationRouter(this);
|
||||||
|
this.faults = new api.FaultManagementAPI.default(this);
|
||||||
this.forms = new api.FormsAPI.default(this);
|
this.forms = new api.FormsAPI.default(this);
|
||||||
|
|
||||||
this.branding = BrandingAPI.default;
|
this.branding = BrandingAPI.default;
|
||||||
|
@ -24,6 +24,7 @@ define([
|
|||||||
'./actions/ActionsAPI',
|
'./actions/ActionsAPI',
|
||||||
'./composition/CompositionAPI',
|
'./composition/CompositionAPI',
|
||||||
'./Editor',
|
'./Editor',
|
||||||
|
'./faultmanagement/FaultManagementAPI',
|
||||||
'./forms/FormsAPI',
|
'./forms/FormsAPI',
|
||||||
'./indicators/IndicatorAPI',
|
'./indicators/IndicatorAPI',
|
||||||
'./menu/MenuAPI',
|
'./menu/MenuAPI',
|
||||||
@ -40,6 +41,7 @@ define([
|
|||||||
ActionsAPI,
|
ActionsAPI,
|
||||||
CompositionAPI,
|
CompositionAPI,
|
||||||
EditorAPI,
|
EditorAPI,
|
||||||
|
FaultManagementAPI,
|
||||||
FormsAPI,
|
FormsAPI,
|
||||||
IndicatorAPI,
|
IndicatorAPI,
|
||||||
MenuAPI,
|
MenuAPI,
|
||||||
@ -57,6 +59,7 @@ define([
|
|||||||
ActionsAPI: ActionsAPI.default,
|
ActionsAPI: ActionsAPI.default,
|
||||||
CompositionAPI: CompositionAPI,
|
CompositionAPI: CompositionAPI,
|
||||||
EditorAPI: EditorAPI,
|
EditorAPI: EditorAPI,
|
||||||
|
FaultManagementAPI: FaultManagementAPI,
|
||||||
FormsAPI: FormsAPI,
|
FormsAPI: FormsAPI,
|
||||||
IndicatorAPI: IndicatorAPI.default,
|
IndicatorAPI: IndicatorAPI.default,
|
||||||
MenuAPI: MenuAPI.default,
|
MenuAPI: MenuAPI.default,
|
||||||
|
106
src/api/faultmanagement/FaultManagementAPI.js
Normal file
106
src/api/faultmanagement/FaultManagementAPI.js
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
export default class FaultManagementAPI {
|
||||||
|
constructor(openmct) {
|
||||||
|
this.openmct = openmct;
|
||||||
|
}
|
||||||
|
|
||||||
|
addProvider(provider) {
|
||||||
|
this.provider = provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
supportsActions() {
|
||||||
|
return this.provider?.acknowledgeFault !== undefined && this.provider?.shelveFault !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
request(domainObject) {
|
||||||
|
if (!this.provider?.supportsRequest(domainObject)) {
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.provider.request(domainObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
subscribe(domainObject, callback) {
|
||||||
|
if (!this.provider?.supportsSubscribe(domainObject)) {
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.provider.subscribe(domainObject, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
acknowledgeFault(fault, ackData) {
|
||||||
|
return this.provider.acknowledgeFault(fault, ackData);
|
||||||
|
}
|
||||||
|
|
||||||
|
shelveFault(fault, shelveData) {
|
||||||
|
return this.provider.shelveFault(fault, shelveData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @typedef {object} Fault
|
||||||
|
* @property {string} type
|
||||||
|
* @property {object} fault
|
||||||
|
* @property {boolean} fault.acknowledged
|
||||||
|
* @property {object} fault.currentValueInfo
|
||||||
|
* @property {number} fault.currentValueInfo.value
|
||||||
|
* @property {string} fault.currentValueInfo.rangeCondition
|
||||||
|
* @property {string} fault.currentValueInfo.monitoringResult
|
||||||
|
* @property {string} fault.id
|
||||||
|
* @property {string} fault.name
|
||||||
|
* @property {string} fault.namespace
|
||||||
|
* @property {number} fault.seqNum
|
||||||
|
* @property {string} fault.severity
|
||||||
|
* @property {boolean} fault.shelved
|
||||||
|
* @property {string} fault.shortDescription
|
||||||
|
* @property {string} fault.triggerTime
|
||||||
|
* @property {object} fault.triggerValueInfo
|
||||||
|
* @property {number} fault.triggerValueInfo.value
|
||||||
|
* @property {string} fault.triggerValueInfo.rangeCondition
|
||||||
|
* @property {string} fault.triggerValueInfo.monitoringResult
|
||||||
|
* @example
|
||||||
|
* {
|
||||||
|
* "type": "",
|
||||||
|
* "fault": {
|
||||||
|
* "acknowledged": true,
|
||||||
|
* "currentValueInfo": {
|
||||||
|
* "value": 0,
|
||||||
|
* "rangeCondition": "",
|
||||||
|
* "monitoringResult": ""
|
||||||
|
* },
|
||||||
|
* "id": "",
|
||||||
|
* "name": "",
|
||||||
|
* "namespace": "",
|
||||||
|
* "seqNum": 0,
|
||||||
|
* "severity": "",
|
||||||
|
* "shelved": true,
|
||||||
|
* "shortDescription": "",
|
||||||
|
* "triggerTime": "",
|
||||||
|
* "triggerValueInfo": {
|
||||||
|
* "value": 0,
|
||||||
|
* "rangeCondition": "",
|
||||||
|
* "monitoringResult": ""
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
144
src/api/faultmanagement/FaultManagementAPISpec.js
Normal file
144
src/api/faultmanagement/FaultManagementAPISpec.js
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* License); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import {
|
||||||
|
createOpenMct,
|
||||||
|
resetApplicationState
|
||||||
|
} from '../../utils/testing';
|
||||||
|
|
||||||
|
const faultName = 'super duper fault';
|
||||||
|
const aFault = {
|
||||||
|
type: '',
|
||||||
|
fault: {
|
||||||
|
acknowledged: true,
|
||||||
|
currentValueInfo: {
|
||||||
|
value: 0,
|
||||||
|
rangeCondition: '',
|
||||||
|
monitoringResult: ''
|
||||||
|
},
|
||||||
|
id: '',
|
||||||
|
name: faultName,
|
||||||
|
namespace: '',
|
||||||
|
seqNum: 0,
|
||||||
|
severity: '',
|
||||||
|
shelved: true,
|
||||||
|
shortDescription: '',
|
||||||
|
triggerTime: '',
|
||||||
|
triggerValueInfo: {
|
||||||
|
value: 0,
|
||||||
|
rangeCondition: '',
|
||||||
|
monitoringResult: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const faultDomainObject = {
|
||||||
|
name: 'it is not your fault',
|
||||||
|
type: 'faultManagement',
|
||||||
|
identifier: {
|
||||||
|
key: 'nobodies',
|
||||||
|
namespace: 'fault'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const aComment = 'THIS is my fault.';
|
||||||
|
const faultManagementProvider = {
|
||||||
|
request() {
|
||||||
|
return Promise.resolve([aFault]);
|
||||||
|
},
|
||||||
|
subscribe(domainObject, callback) {
|
||||||
|
return () => {};
|
||||||
|
},
|
||||||
|
supportsRequest(domainObject) {
|
||||||
|
return domainObject.type === 'faultManagement';
|
||||||
|
},
|
||||||
|
supportsSubscribe(domainObject) {
|
||||||
|
return domainObject.type === 'faultManagement';
|
||||||
|
},
|
||||||
|
acknowledgeFault(fault, { comment = '' }) {
|
||||||
|
return Promise.resolve({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
},
|
||||||
|
shelveFault(fault, shelveData) {
|
||||||
|
return Promise.resolve({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('The Fault Management API', () => {
|
||||||
|
let openmct;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
openmct = createOpenMct();
|
||||||
|
openmct.install(openmct.plugins.FaultManagement());
|
||||||
|
// openmct.install(openmct.plugins.example.ExampleFaultSource());
|
||||||
|
openmct.faults.addProvider(faultManagementProvider);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
return resetApplicationState(openmct);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('allows you to request a fault', async () => {
|
||||||
|
spyOn(faultManagementProvider, 'supportsRequest').and.callThrough();
|
||||||
|
|
||||||
|
let faultResponse = await openmct.faults.request(faultDomainObject);
|
||||||
|
|
||||||
|
expect(faultManagementProvider.supportsRequest).toHaveBeenCalledWith(faultDomainObject);
|
||||||
|
expect(faultResponse[0].fault.name).toEqual(faultName);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('allows you to subscribe to a fault', () => {
|
||||||
|
spyOn(faultManagementProvider, 'subscribe').and.callThrough();
|
||||||
|
spyOn(faultManagementProvider, 'supportsSubscribe').and.callThrough();
|
||||||
|
|
||||||
|
let unsubscribe = openmct.faults.subscribe(faultDomainObject, () => {});
|
||||||
|
|
||||||
|
expect(unsubscribe).toEqual(jasmine.any(Function));
|
||||||
|
expect(faultManagementProvider.supportsSubscribe).toHaveBeenCalledWith(faultDomainObject);
|
||||||
|
expect(faultManagementProvider.subscribe).toHaveBeenCalledOnceWith(faultDomainObject, jasmine.any(Function));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('will tell you if the fault management provider supports actions', () => {
|
||||||
|
expect(openmct.faults.supportsActions()).toBeTrue();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('will allow you to acknowledge a fault', async () => {
|
||||||
|
spyOn(faultManagementProvider, 'acknowledgeFault').and.callThrough();
|
||||||
|
|
||||||
|
let ackResponse = await openmct.faults.acknowledgeFault(aFault, aComment);
|
||||||
|
|
||||||
|
expect(faultManagementProvider.acknowledgeFault).toHaveBeenCalledWith(aFault, aComment);
|
||||||
|
expect(ackResponse.success).toBeTrue();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('will allow you to shelve a fault', async () => {
|
||||||
|
spyOn(faultManagementProvider, 'shelveFault').and.callThrough();
|
||||||
|
|
||||||
|
let shelveResponse = await openmct.faults.shelveFault(aFault, aComment);
|
||||||
|
|
||||||
|
expect(faultManagementProvider.shelveFault).toHaveBeenCalledWith(aFault, aComment);
|
||||||
|
expect(shelveResponse.success).toBeTrue();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@ -36,7 +36,7 @@
|
|||||||
<li
|
<li
|
||||||
v-for="action in options.actions"
|
v-for="action in options.actions"
|
||||||
:key="action.name"
|
:key="action.name"
|
||||||
:class="action.cssClass"
|
:class="[action.cssClass, action.isDisabled ? 'disabled' : '']"
|
||||||
:title="action.description"
|
:title="action.description"
|
||||||
:data-testid="action.testId || false"
|
:data-testid="action.testId || false"
|
||||||
@click="action.onItemClicked"
|
@click="action.onItemClicked"
|
||||||
|
129
src/plugins/faultManagement/FaultManagementInspector.vue
Normal file
129
src/plugins/faultManagement/FaultManagementInspector.vue
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-if="isShowDetails"
|
||||||
|
class="c-inspector__properties c-inspect-properties"
|
||||||
|
>
|
||||||
|
<div class="c-inspect-properties__header">Fault Details</div>
|
||||||
|
<ul
|
||||||
|
class="c-inspect-properties__section"
|
||||||
|
>
|
||||||
|
<DetailText :detail="sourceDetails" />
|
||||||
|
<DetailText :detail="occuredDetails" />
|
||||||
|
<DetailText :detail="criticalityDetails" />
|
||||||
|
<DetailText :detail="descriptionDetails" />
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="c-inspect-properties__header">Telemetry</div>
|
||||||
|
<ul
|
||||||
|
class="c-inspect-properties__section"
|
||||||
|
>
|
||||||
|
<DetailText :detail="systemDetails" />
|
||||||
|
<DetailText :detail="tripValueDetails" />
|
||||||
|
<DetailText :detail="currentValueDetails" />
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DetailText from '@/ui/inspector/details/DetailText.vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'FaultManagementInspector',
|
||||||
|
components: {
|
||||||
|
DetailText
|
||||||
|
},
|
||||||
|
inject: ['openmct'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShowDetails: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
criticalityDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Criticality',
|
||||||
|
value: this.selectedFault?.severity
|
||||||
|
};
|
||||||
|
},
|
||||||
|
currentValueDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Live value',
|
||||||
|
value: this.selectedFault?.currentValueInfo?.value
|
||||||
|
};
|
||||||
|
},
|
||||||
|
descriptionDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Description',
|
||||||
|
value: this.selectedFault?.shortDescription
|
||||||
|
};
|
||||||
|
},
|
||||||
|
occuredDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Occured',
|
||||||
|
value: this.selectedFault?.triggerTime
|
||||||
|
};
|
||||||
|
},
|
||||||
|
sourceDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Source',
|
||||||
|
value: this.selectedFault?.name
|
||||||
|
};
|
||||||
|
},
|
||||||
|
systemDetails() {
|
||||||
|
return {
|
||||||
|
name: 'System',
|
||||||
|
value: this.selectedFault?.namespace
|
||||||
|
};
|
||||||
|
},
|
||||||
|
tripValueDetails() {
|
||||||
|
return {
|
||||||
|
name: 'Trip Value',
|
||||||
|
value: this.selectedFault?.triggerValueInfo?.value
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.updateSelectedFaults();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateSelectedFaults() {
|
||||||
|
const selection = this.openmct.selection.get();
|
||||||
|
this.isShowDetails = false;
|
||||||
|
|
||||||
|
if (selection.length === 0 || selection[0].length < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectedFaults = selection[0][1].context.selectedFaults;
|
||||||
|
if (selectedFaults.length !== 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isShowDetails = true;
|
||||||
|
this.selectedFault = selectedFaults[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
@ -0,0 +1,71 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import FaultManagementInspector from './FaultManagementInspector.vue';
|
||||||
|
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
import { FAULT_MANAGEMENT_INSPECTOR, FAULT_MANAGEMENT_TYPE } from './constants';
|
||||||
|
|
||||||
|
export default function FaultManagementInspectorViewProvider(openmct) {
|
||||||
|
return {
|
||||||
|
openmct: openmct,
|
||||||
|
key: FAULT_MANAGEMENT_INSPECTOR,
|
||||||
|
name: 'FAULT_MANAGEMENT_TYPE',
|
||||||
|
canView: (selection) => {
|
||||||
|
if (selection.length !== 1 || selection[0].length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let object = selection[0][0].context.item;
|
||||||
|
|
||||||
|
return object && object.type === FAULT_MANAGEMENT_TYPE;
|
||||||
|
},
|
||||||
|
view: (selection) => {
|
||||||
|
let component;
|
||||||
|
|
||||||
|
return {
|
||||||
|
show: function (element) {
|
||||||
|
component = new Vue({
|
||||||
|
el: element,
|
||||||
|
components: {
|
||||||
|
FaultManagementInspector
|
||||||
|
},
|
||||||
|
provide: {
|
||||||
|
openmct
|
||||||
|
},
|
||||||
|
template: '<FaultManagementInspector></FaultManagementInspector>'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
destroy: function () {
|
||||||
|
if (component) {
|
||||||
|
component.$destroy();
|
||||||
|
component = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
priority: () => {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
103
src/plugins/faultManagement/FaultManagementListHeader.vue
Normal file
103
src/plugins/faultManagement/FaultManagementListHeader.vue
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="c-fault-mgmt__list-header c-fault-mgmt__list">
|
||||||
|
<div class="c-fault-mgmt__checkbox">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:checked="isSelectAll"
|
||||||
|
@input="selectAll"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="c-fault-mgmt__list-content">
|
||||||
|
<div class="c-fault-mgmt__list-header-results"> {{ totalFaultsCount }} Results </div>
|
||||||
|
<div class="c-fault-mgmt__list-content-right">
|
||||||
|
<div class="c-fault-mgmt__list-header-tripVal c-fault-mgmt__list-trigVal">Trip Value</div>
|
||||||
|
<div class="c-fault-mgmt__list-header-liveVal c-fault-mgmt__list-curVal">Live Value</div>
|
||||||
|
<div class="c-fault-mgmt__list-header-trigTime c-fault-mgmt__list-trigTime">Trigger Time</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="c-fault-mgmt__list-action-wrapper">
|
||||||
|
<div class="c-fault-mgmt__list-header-sortButton c-fault-mgmt__list-action-button">
|
||||||
|
<SelectField
|
||||||
|
class="c-fault-mgmt-viewButton"
|
||||||
|
title="Sort By"
|
||||||
|
:model="model"
|
||||||
|
@onChange="onChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import SelectField from '@/api/forms/components/controls/SelectField.vue';
|
||||||
|
|
||||||
|
import { SORT_ITEMS } from './constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
SelectField
|
||||||
|
},
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
props: {
|
||||||
|
selectedFaults: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
totalFaultsCount: {
|
||||||
|
type: Number,
|
||||||
|
default() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
model: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
isSelectAll() {
|
||||||
|
return this.totalFaultsCount > 0 && this.selectedFaults.length === this.totalFaultsCount;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeMount() {
|
||||||
|
const options = Object.values(SORT_ITEMS);
|
||||||
|
this.model = {
|
||||||
|
options,
|
||||||
|
value: options[0].value
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onChange(data) {
|
||||||
|
this.$emit('sortChanged', data);
|
||||||
|
},
|
||||||
|
selectAll(e) {
|
||||||
|
this.$emit('selectAll', e.target.checked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
191
src/plugins/faultManagement/FaultManagementListItem.vue
Normal file
191
src/plugins/faultManagement/FaultManagementListItem.vue
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="c-fault-mgmt__list data-selectable"
|
||||||
|
:class="[
|
||||||
|
{'is-selected': isSelected},
|
||||||
|
{'is-unacknowledged': !fault.acknowledged},
|
||||||
|
{'is-shelved': fault.shelved}
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<div class="c-fault-mgmt__checkbox">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:checked="isSelected"
|
||||||
|
@input="toggleSelected"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="c-fault-mgmt__list-severity"
|
||||||
|
:title="fault.severity"
|
||||||
|
:class="[
|
||||||
|
'is-severity-' + fault.severity
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="c-fault-mgmt__list-content">
|
||||||
|
<div class="c-fault-mgmt__list-pathname">
|
||||||
|
<div class="c-fault-mgmt__list-path">{{ fault.namespace }}</div>
|
||||||
|
<div class="c-fault-mgmt__list-faultname">{{ fault.name }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="c-fault-mgmt__list-content-right">
|
||||||
|
<div
|
||||||
|
class="c-fault-mgmt__list-trigVal"
|
||||||
|
:class="tripValueClassname"
|
||||||
|
title="Trip Value"
|
||||||
|
>{{ fault.triggerValueInfo.value }}</div>
|
||||||
|
<div
|
||||||
|
class="c-fault-mgmt__list-curVal"
|
||||||
|
:class="liveValueClassname"
|
||||||
|
title="Live Value"
|
||||||
|
>
|
||||||
|
{{ fault.currentValueInfo.value }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="c-fault-mgmt__list-trigTime"
|
||||||
|
>{{ fault.triggerTime }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="c-fault-mgmt__list-action-wrapper">
|
||||||
|
<button
|
||||||
|
class="c-fault-mgmt__list-action-button l-browse-bar__actions c-icon-button icon-3-dots"
|
||||||
|
title="Disposition Actions"
|
||||||
|
@click="showActionMenu"
|
||||||
|
></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
const RANGE_CONDITION_CLASS = {
|
||||||
|
'LOW': 'is-limit--lwr',
|
||||||
|
'HIGH': 'is-limit--upr'
|
||||||
|
};
|
||||||
|
|
||||||
|
const SEVERITY_CLASS = {
|
||||||
|
'CRITICAL': 'is-limit--red',
|
||||||
|
'WARNING': 'is-limit--yellow',
|
||||||
|
'WATCH': 'is-limit--cyan'
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
props: {
|
||||||
|
fault: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
isSelected: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
liveValueClassname() {
|
||||||
|
const currentValueInfo = this.fault?.currentValueInfo;
|
||||||
|
if (!currentValueInfo || currentValueInfo.monitoringResult === 'IN_LIMITS') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
let classname = RANGE_CONDITION_CLASS[currentValueInfo.rangeCondition] || '';
|
||||||
|
classname += ' ';
|
||||||
|
classname += SEVERITY_CLASS[currentValueInfo.monitoringResult] || '';
|
||||||
|
|
||||||
|
return classname.trim();
|
||||||
|
},
|
||||||
|
name() {
|
||||||
|
return `${this.fault?.name}/${this.fault?.namespace}`;
|
||||||
|
},
|
||||||
|
severity() {
|
||||||
|
return this.fault?.severity?.toLowerCase();
|
||||||
|
},
|
||||||
|
triggerTime() {
|
||||||
|
return this.fault?.triggerTime;
|
||||||
|
},
|
||||||
|
triggerValue() {
|
||||||
|
return this.fault?.triggerValueInfo?.value;
|
||||||
|
},
|
||||||
|
tripValueClassname() {
|
||||||
|
const triggerValueInfo = this.fault?.triggerValueInfo;
|
||||||
|
if (!triggerValueInfo || triggerValueInfo.monitoringResult === 'IN_LIMITS') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
let classname = RANGE_CONDITION_CLASS[triggerValueInfo.rangeCondition] || '';
|
||||||
|
classname += ' ';
|
||||||
|
classname += SEVERITY_CLASS[triggerValueInfo.monitoringResult] || '';
|
||||||
|
|
||||||
|
return classname.trim();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
showActionMenu(event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
const menuItems = [
|
||||||
|
{
|
||||||
|
cssClass: 'icon-bell',
|
||||||
|
isDisabled: this.fault.acknowledged,
|
||||||
|
name: 'Acknowledge',
|
||||||
|
description: '',
|
||||||
|
onItemClicked: (e) => {
|
||||||
|
this.$emit('acknowledgeSelected', [this.fault]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cssClass: 'icon-timer',
|
||||||
|
name: 'Shelve',
|
||||||
|
description: '',
|
||||||
|
onItemClicked: () => {
|
||||||
|
this.$emit('shelveSelected', [this.fault], { shelved: true });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cssClass: 'icon-timer',
|
||||||
|
isDisabled: Boolean(!this.fault.shelved),
|
||||||
|
name: 'Unshelve',
|
||||||
|
description: '',
|
||||||
|
onItemClicked: () => {
|
||||||
|
this.$emit('shelveSelected', [this.fault], { shelved: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
this.openmct.menus.showMenu(event.x, event.y, menuItems);
|
||||||
|
},
|
||||||
|
toggleSelected(event) {
|
||||||
|
const faultData = {
|
||||||
|
fault: this.fault,
|
||||||
|
selected: event.target.checked
|
||||||
|
};
|
||||||
|
|
||||||
|
this.$emit('toggleSelected', faultData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
299
src/plugins/faultManagement/FaultManagementListView.vue
Normal file
299
src/plugins/faultManagement/FaultManagementListView.vue
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="c-faults-list-view">
|
||||||
|
<FaultManagementSearch
|
||||||
|
:search-term="searchTerm"
|
||||||
|
@filterChanged="updateFilter"
|
||||||
|
@updateSearchTerm="updateSearchTerm"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FaultManagementToolbar
|
||||||
|
v-if="showToolbar"
|
||||||
|
:selected-faults="selectedFaults"
|
||||||
|
@acknowledgeSelected="toggleAcknowledgeSelected"
|
||||||
|
@shelveSelected="toggleShelveSelected"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FaultManagementListHeader
|
||||||
|
class="header"
|
||||||
|
:selected-faults="Object.values(selectedFaults)"
|
||||||
|
:total-faults-count="filteredFaultsList.length"
|
||||||
|
@selectAll="selectAll"
|
||||||
|
@sortChanged="sortChanged"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<template v-if="filteredFaultsList.length > 0">
|
||||||
|
<FaultManagementListItem
|
||||||
|
v-for="fault of filteredFaultsList"
|
||||||
|
:key="fault.id"
|
||||||
|
:fault="fault"
|
||||||
|
:is-selected="isSelected(fault)"
|
||||||
|
@toggleSelected="toggleSelected"
|
||||||
|
@acknowledgeSelected="toggleAcknowledgeSelected"
|
||||||
|
@shelveSelected="toggleShelveSelected"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import FaultManagementListHeader from './FaultManagementListHeader.vue';
|
||||||
|
import FaultManagementListItem from './FaultManagementListItem.vue';
|
||||||
|
import FaultManagementSearch from './FaultManagementSearch.vue';
|
||||||
|
import FaultManagementToolbar from './FaultManagementToolbar.vue';
|
||||||
|
|
||||||
|
import { FAULT_MANAGEMENT_SHELVE_DURATIONS_IN_MS, FILTER_ITEMS, SORT_ITEMS } from './constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
FaultManagementListHeader,
|
||||||
|
FaultManagementListItem,
|
||||||
|
FaultManagementSearch,
|
||||||
|
FaultManagementToolbar
|
||||||
|
},
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
props: {
|
||||||
|
faultsList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
filterIndex: 0,
|
||||||
|
searchTerm: '',
|
||||||
|
selectedFaults: {},
|
||||||
|
sortBy: Object.values(SORT_ITEMS)[0].value
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
filteredFaultsList() {
|
||||||
|
const filterName = FILTER_ITEMS[this.filterIndex];
|
||||||
|
let list = this.faultsList.filter(fault => !fault.shelved);
|
||||||
|
if (filterName === 'Acknowledged') {
|
||||||
|
list = this.faultsList.filter(fault => fault.acknowledged);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterName === 'Unacknowledged') {
|
||||||
|
list = this.faultsList.filter(fault => !fault.acknowledged);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterName === 'Shelved') {
|
||||||
|
list = this.faultsList.filter(fault => fault.shelved);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.searchTerm.length > 0) {
|
||||||
|
list = list.filter(this.filterUsingSearchTerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
list.sort(SORT_ITEMS[this.sortBy].sortFunction);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
},
|
||||||
|
showToolbar() {
|
||||||
|
return this.openmct.faults.supportsActions();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
filterUsingSearchTerm(fault) {
|
||||||
|
if (fault?.id?.toString().toLowerCase().includes(this.searchTerm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fault?.triggerValueInfo?.toString().toLowerCase().includes(this.searchTerm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fault?.currentValueInfo?.toString().toLowerCase().includes(this.searchTerm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fault?.triggerTime.toString().toLowerCase().includes(this.searchTerm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fault?.severity.toString().toLowerCase().includes(this.searchTerm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
isSelected(fault) {
|
||||||
|
return Boolean(this.selectedFaults[fault.id]);
|
||||||
|
},
|
||||||
|
selectAll(toggle = false) {
|
||||||
|
this.faultsList.forEach(fault => {
|
||||||
|
const faultData = {
|
||||||
|
fault,
|
||||||
|
selected: toggle
|
||||||
|
};
|
||||||
|
this.toggleSelected(faultData);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
sortChanged(sort) {
|
||||||
|
this.sortBy = sort.value;
|
||||||
|
},
|
||||||
|
toggleSelected({ fault, selected = false}) {
|
||||||
|
if (selected) {
|
||||||
|
this.$set(this.selectedFaults, fault.id, fault);
|
||||||
|
} else {
|
||||||
|
this.$delete(this.selectedFaults, fault.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectedFaults = Object.values(this.selectedFaults);
|
||||||
|
this.openmct.selection.select(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
element: this.$el,
|
||||||
|
context: {
|
||||||
|
item: this.openmct.router.path[0]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
element: this.$el,
|
||||||
|
context: {
|
||||||
|
selectedFaults
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false);
|
||||||
|
},
|
||||||
|
toggleAcknowledgeSelected(faults = Object.values(this.selectedFaults)) {
|
||||||
|
let title = '';
|
||||||
|
if (faults.length > 1) {
|
||||||
|
title = `Acknowledge ${faults.length} selected faults`;
|
||||||
|
} else {
|
||||||
|
title = `Acknowledge fault: ${faults[0].name}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formStructure = {
|
||||||
|
title,
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
rows: [
|
||||||
|
{
|
||||||
|
key: 'comment',
|
||||||
|
control: 'textarea',
|
||||||
|
name: 'Comment',
|
||||||
|
pattern: '\\S+',
|
||||||
|
required: false,
|
||||||
|
cssClass: 'l-input-lg',
|
||||||
|
value: ''
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
buttons: {
|
||||||
|
submit: {
|
||||||
|
label: 'Acknowledge'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.openmct.forms.showForm(formStructure)
|
||||||
|
.then(data => {
|
||||||
|
Object.values(faults)
|
||||||
|
.forEach(selectedFault => {
|
||||||
|
this.openmct.faults.acknowledgeFault(selectedFault, data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.selectedFaults = {};
|
||||||
|
},
|
||||||
|
async toggleShelveSelected(faults = Object.values(this.selectedFaults), shelveData = {}) {
|
||||||
|
const { shelved = true } = shelveData;
|
||||||
|
if (shelved) {
|
||||||
|
let title = faults.length > 1
|
||||||
|
? `Shelve ${faults.length} selected faults`
|
||||||
|
: `Shelve fault: ${faults[0].name}`
|
||||||
|
;
|
||||||
|
|
||||||
|
const formStructure = {
|
||||||
|
title,
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
rows: [
|
||||||
|
{
|
||||||
|
key: 'comment',
|
||||||
|
control: 'textarea',
|
||||||
|
name: 'Comment',
|
||||||
|
pattern: '\\S+',
|
||||||
|
required: false,
|
||||||
|
cssClass: 'l-input-lg',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'shelveDuration',
|
||||||
|
control: 'select',
|
||||||
|
name: 'Shelve Duration',
|
||||||
|
options: FAULT_MANAGEMENT_SHELVE_DURATIONS_IN_MS,
|
||||||
|
required: false,
|
||||||
|
cssClass: 'l-input-lg',
|
||||||
|
value: FAULT_MANAGEMENT_SHELVE_DURATIONS_IN_MS[0].value
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
buttons: {
|
||||||
|
submit: {
|
||||||
|
label: 'Shelve'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = await this.openmct.forms.showForm(formStructure);
|
||||||
|
} catch (e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
shelveData.comment = data.comment || '';
|
||||||
|
shelveData.shelveDuration = data.shelveDuration !== undefined
|
||||||
|
? data.shelveDuration
|
||||||
|
: FAULT_MANAGEMENT_SHELVE_DURATIONS_IN_MS[0].value;
|
||||||
|
} else {
|
||||||
|
shelveData = {
|
||||||
|
shelved: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.values(faults)
|
||||||
|
.forEach(selectedFault => {
|
||||||
|
this.openmct.faults.shelveFault(selectedFault, shelveData);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.selectedFaults = {};
|
||||||
|
},
|
||||||
|
updateFilter(filter) {
|
||||||
|
this.selectAll();
|
||||||
|
|
||||||
|
this.filterIndex = filter.model.options.findIndex(option => option.value === filter.value);
|
||||||
|
},
|
||||||
|
updateSearchTerm(term = '') {
|
||||||
|
this.searchTerm = term.toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
56
src/plugins/faultManagement/FaultManagementObjectProvider.js
Normal file
56
src/plugins/faultManagement/FaultManagementObjectProvider.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import { FAULT_MANAGEMENT_TYPE, FAULT_MANAGEMENT_VIEW, FAULT_MANAGEMENT_NAMESPACE } from './constants';
|
||||||
|
|
||||||
|
export default class FaultManagementObjectProvider {
|
||||||
|
constructor(openmct) {
|
||||||
|
this.openmct = openmct;
|
||||||
|
this.namespace = FAULT_MANAGEMENT_NAMESPACE;
|
||||||
|
this.key = FAULT_MANAGEMENT_VIEW;
|
||||||
|
this.objects = {};
|
||||||
|
|
||||||
|
this.createFaultManagementRootObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
createFaultManagementRootObject() {
|
||||||
|
this.rootObject = {
|
||||||
|
identifier: {
|
||||||
|
key: this.key,
|
||||||
|
namespace: this.namespace
|
||||||
|
},
|
||||||
|
name: 'Fault Management',
|
||||||
|
type: FAULT_MANAGEMENT_TYPE,
|
||||||
|
location: 'ROOT'
|
||||||
|
};
|
||||||
|
|
||||||
|
this.openmct.objects.addRoot(this.rootObject.identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
get(identifier) {
|
||||||
|
if (identifier.key === FAULT_MANAGEMENT_VIEW) {
|
||||||
|
return Promise.resolve(this.rootObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
}
|
42
src/plugins/faultManagement/FaultManagementPlugin.js
Normal file
42
src/plugins/faultManagement/FaultManagementPlugin.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import FaultManagementViewProvider from './FaultManagementViewProvider';
|
||||||
|
import FaultManagementObjectProvider from './FaultManagementObjectProvider';
|
||||||
|
import FaultManagementInspectorViewProvider from './FaultManagementInspectorViewProvider';
|
||||||
|
|
||||||
|
import { FAULT_MANAGEMENT_TYPE, FAULT_MANAGEMENT_NAMESPACE } from './constants';
|
||||||
|
|
||||||
|
export default function FaultManagementPlugin() {
|
||||||
|
return function (openmct) {
|
||||||
|
openmct.types.addType(FAULT_MANAGEMENT_TYPE, {
|
||||||
|
name: 'Fault Management',
|
||||||
|
creatable: false,
|
||||||
|
description: 'Fault Management View',
|
||||||
|
cssClass: 'icon-telemetry'
|
||||||
|
});
|
||||||
|
|
||||||
|
openmct.objectViews.addProvider(new FaultManagementViewProvider(openmct));
|
||||||
|
openmct.inspectorViews.addProvider(new FaultManagementInspectorViewProvider(openmct));
|
||||||
|
openmct.objects.addProvider(FAULT_MANAGEMENT_NAMESPACE, new FaultManagementObjectProvider(openmct));
|
||||||
|
};
|
||||||
|
}
|
90
src/plugins/faultManagement/FaultManagementSearch.vue
Normal file
90
src/plugins/faultManagement/FaultManagementSearch.vue
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="c-fault-mgmt__search-row">
|
||||||
|
<Search
|
||||||
|
class="c-fault-mgmt-search"
|
||||||
|
:value="searchTerm"
|
||||||
|
@input="updateSearchTerm"
|
||||||
|
@clear="updateSearchTerm"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SelectField
|
||||||
|
class="c-fault-mgmt-viewButton"
|
||||||
|
title="View Filter"
|
||||||
|
:model="model"
|
||||||
|
@onChange="onChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import SelectField from '@/api/forms/components/controls/SelectField.vue';
|
||||||
|
import Search from '@/ui/components/search.vue';
|
||||||
|
|
||||||
|
import { FILTER_ITEMS } from './constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
SelectField,
|
||||||
|
Search
|
||||||
|
},
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
props: {
|
||||||
|
searchTerm: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
items: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
model() {
|
||||||
|
return {
|
||||||
|
options: this.items,
|
||||||
|
value: this.items[0] ? this.items[0].value : FILTER_ITEMS[0].toLowerCase()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.items = FILTER_ITEMS
|
||||||
|
.map(item => {
|
||||||
|
return {
|
||||||
|
name: item,
|
||||||
|
value: item.toLowerCase()
|
||||||
|
};
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onChange(data) {
|
||||||
|
this.$emit('filterChanged', data);
|
||||||
|
},
|
||||||
|
updateSearchTerm(searchTerm) {
|
||||||
|
this.$emit('updateSearchTerm', searchTerm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
102
src/plugins/faultManagement/FaultManagementToolbar.vue
Normal file
102
src/plugins/faultManagement/FaultManagementToolbar.vue
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="c-fault-mgmt__toolbar">
|
||||||
|
<button
|
||||||
|
class="c-icon-button icon-bell"
|
||||||
|
title="Acknowledge selected faults"
|
||||||
|
:disabled="disableAcknowledge"
|
||||||
|
@click="acknowledgeSelected"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
title="Acknowledge selected faults"
|
||||||
|
class="c-icon-button__label"
|
||||||
|
>
|
||||||
|
Acknowledge
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="c-icon-button icon-timer"
|
||||||
|
title="Shelve selected faults"
|
||||||
|
:disabled="disableShelve"
|
||||||
|
@click="shelveSelected"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
title="Shelve selected items"
|
||||||
|
class="c-icon-button__label"
|
||||||
|
>
|
||||||
|
Shelve
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
props: {
|
||||||
|
selectedFaults: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
disableAcknowledge: true,
|
||||||
|
disableShelve: true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
selectedFaults(newSelectedFaults) {
|
||||||
|
const selectedfaults = Object.values(newSelectedFaults);
|
||||||
|
|
||||||
|
let disableAcknowledge = true;
|
||||||
|
let disableShelve = true;
|
||||||
|
|
||||||
|
selectedfaults.forEach(fault => {
|
||||||
|
if (!fault.shelved) {
|
||||||
|
disableShelve = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fault.acknowledged) {
|
||||||
|
disableAcknowledge = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.disableAcknowledge = disableAcknowledge;
|
||||||
|
this.disableShelve = disableShelve;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
acknowledgeSelected() {
|
||||||
|
this.$emit('acknowledgeSelected');
|
||||||
|
},
|
||||||
|
shelveSelected() {
|
||||||
|
this.$emit('shelveSelected');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
77
src/plugins/faultManagement/FaultManagementView.vue
Normal file
77
src/plugins/faultManagement/FaultManagementView.vue
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="c-fault-mgmt">
|
||||||
|
<FaultManagementListView
|
||||||
|
:faults-list="faultsList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import FaultManagementListView from './FaultManagementListView.vue';
|
||||||
|
import { FAULT_MANAGEMENT_ALARMS, FAULT_MANAGEMENT_GLOBAL_ALARMS } from './constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
FaultManagementListView
|
||||||
|
},
|
||||||
|
inject: ['openmct', 'domainObject'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
faultsList: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.updateFaultList();
|
||||||
|
|
||||||
|
this.unsubscribe = this.openmct.faults
|
||||||
|
.subscribe(this.domainObject, this.updateFault);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.unsubscribe) {
|
||||||
|
this.unsubscribe();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateFault({ fault, type }) {
|
||||||
|
if (type === FAULT_MANAGEMENT_GLOBAL_ALARMS) {
|
||||||
|
this.updateFaultList();
|
||||||
|
} else if (type === FAULT_MANAGEMENT_ALARMS) {
|
||||||
|
this.faultsList.forEach((faultValue, i) => {
|
||||||
|
if (fault.id === faultValue.id) {
|
||||||
|
this.$set(this.faultsList, i, fault);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updateFaultList() {
|
||||||
|
this.openmct.faults
|
||||||
|
.request(this.domainObject)
|
||||||
|
.then(faultsData => {
|
||||||
|
this.faultsList = faultsData.map(fd => fd.fault);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
69
src/plugins/faultManagement/FaultManagementViewProvider.js
Normal file
69
src/plugins/faultManagement/FaultManagementViewProvider.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import FaultManagementView from './FaultManagementView.vue';
|
||||||
|
import { FAULT_MANAGEMENT_TYPE, FAULT_MANAGEMENT_VIEW } from './constants';
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default class FaultManagementViewProvider {
|
||||||
|
constructor(openmct) {
|
||||||
|
this.openmct = openmct;
|
||||||
|
this.key = FAULT_MANAGEMENT_VIEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
canView(domainObject) {
|
||||||
|
return domainObject.type === FAULT_MANAGEMENT_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
canEdit(domainObject) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
view(domainObject) {
|
||||||
|
let component;
|
||||||
|
const openmct = this.openmct;
|
||||||
|
|
||||||
|
return {
|
||||||
|
show: (element) => {
|
||||||
|
component = new Vue({
|
||||||
|
el: element,
|
||||||
|
components: {
|
||||||
|
FaultManagementView
|
||||||
|
},
|
||||||
|
provide: {
|
||||||
|
openmct,
|
||||||
|
domainObject
|
||||||
|
},
|
||||||
|
template: '<FaultManagementView></FaultManagementView>'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
destroy: () => {
|
||||||
|
if (!component) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
component.$destroy();
|
||||||
|
component = undefined;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
122
src/plugins/faultManagement/constants.js
Normal file
122
src/plugins/faultManagement/constants.js
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
const FAULT_SEVERITY = {
|
||||||
|
'CRITICAL': {
|
||||||
|
name: 'CRITICAL',
|
||||||
|
value: 'critical',
|
||||||
|
priority: 0
|
||||||
|
},
|
||||||
|
'WARNING': {
|
||||||
|
name: 'WARNING',
|
||||||
|
value: 'warning',
|
||||||
|
priority: 1
|
||||||
|
},
|
||||||
|
'WATCH': {
|
||||||
|
name: 'WATCH',
|
||||||
|
value: 'watch',
|
||||||
|
priority: 2
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const FAULT_MANAGEMENT_TYPE = 'faultManagement';
|
||||||
|
export const FAULT_MANAGEMENT_INSPECTOR = 'faultManagementInspector';
|
||||||
|
export const FAULT_MANAGEMENT_ALARMS = 'alarms';
|
||||||
|
export const FAULT_MANAGEMENT_GLOBAL_ALARMS = 'global-alarm-status';
|
||||||
|
export const FAULT_MANAGEMENT_SHELVE_DURATIONS_IN_MS = [
|
||||||
|
{
|
||||||
|
name: '5 Minutes',
|
||||||
|
value: 300000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '10 Minutes',
|
||||||
|
value: 600000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '15 Minutes',
|
||||||
|
value: 900000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Indefinite',
|
||||||
|
value: 0
|
||||||
|
}
|
||||||
|
];
|
||||||
|
export const FAULT_MANAGEMENT_VIEW = 'faultManagement.view';
|
||||||
|
export const FAULT_MANAGEMENT_NAMESPACE = 'faults.taxonomy';
|
||||||
|
export const FILTER_ITEMS = [
|
||||||
|
'Standard View',
|
||||||
|
'Acknowledged',
|
||||||
|
'Unacknowledged',
|
||||||
|
'Shelved'
|
||||||
|
];
|
||||||
|
export const SORT_ITEMS = {
|
||||||
|
'newest-first': {
|
||||||
|
name: 'Newest First',
|
||||||
|
value: 'newest-first',
|
||||||
|
sortFunction: (a, b) => {
|
||||||
|
if (b.triggerTime > a.triggerTime) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.triggerTime > b.triggerTime) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'oldest-first': {
|
||||||
|
name: 'Oldest First',
|
||||||
|
value: 'oldest-first',
|
||||||
|
sortFunction: (a, b) => {
|
||||||
|
if (a.triggerTime > b.triggerTime) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.triggerTime < b.triggerTime) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'severity': {
|
||||||
|
name: 'Severity',
|
||||||
|
value: 'severity',
|
||||||
|
sortFunction: (a, b) => {
|
||||||
|
const diff = FAULT_SEVERITY[a.severity].priority - FAULT_SEVERITY[b.severity].priority;
|
||||||
|
if (diff !== 0) {
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b.triggerTime > a.triggerTime) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.triggerTime > b.triggerTime) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
234
src/plugins/faultManagement/fault-manager.scss
Normal file
234
src/plugins/faultManagement/fault-manager.scss
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************** FAULT PROPERTIES */
|
||||||
|
.is-severity-critical{
|
||||||
|
@include glyphBefore($glyph-icon-alert-triangle);
|
||||||
|
color: $colorStatusError;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-severity-warning{
|
||||||
|
@include glyphBefore($glyph-icon-alert-rect);
|
||||||
|
color: $colorStatusAlert;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-severity-watch{
|
||||||
|
@include glyphBefore($glyph-icon-info);
|
||||||
|
color: $colorCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-unacknowledged{
|
||||||
|
.c-fault-mgmt__list-severity{
|
||||||
|
@include pulse($animName: severityAnim, $dur: 200ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-selected {
|
||||||
|
background: $colorSelectedBg;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-shelved{
|
||||||
|
.c-fault-mgmt__list-content{
|
||||||
|
opacity: 50% !important;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.c-fault-mgmt__list-severity{
|
||||||
|
@include pulse($animName: shelvedAnim, $dur: 0ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************** SEARCH */
|
||||||
|
.c-fault-mgmt__search-row{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
> * + * {
|
||||||
|
margin-left: 10px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-fault-mgmt-search{
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************** TOOLBAR */
|
||||||
|
.c-fault-mgmt__toolbar{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
> * {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************** LIST VIEW */
|
||||||
|
.c-faults-list-view {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
> * + * {
|
||||||
|
margin-top: $interiorMargin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************** FAULT ITEM */
|
||||||
|
.c-fault-mgmt__list{
|
||||||
|
background: rgba($colorBodyFg, 0.1);
|
||||||
|
margin-bottom: 5px;
|
||||||
|
padding: 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> * {
|
||||||
|
margin-left: $interiorMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-severity{
|
||||||
|
font-size: 2em;
|
||||||
|
margin-left: $interiorMarginLg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-pathname{
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
&-path{
|
||||||
|
font-size: .75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-faultname{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-content{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-content-right{
|
||||||
|
margin-left: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-trigVal, &-curVal, &-trigTime{
|
||||||
|
@include ellipsize;
|
||||||
|
border-radius: $controlCr;
|
||||||
|
padding: $interiorMargin;
|
||||||
|
width: 80px;
|
||||||
|
margin-right: $interiorMarginLg;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
&-trigVal {
|
||||||
|
@include isLimit();
|
||||||
|
background: rgba($colorBodyFg, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-curVal {
|
||||||
|
@include isLimit();
|
||||||
|
background: rgba($colorBodyFg, 0.25);
|
||||||
|
&-alert{
|
||||||
|
background: $colorWarningHi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-trigTime{
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-action-wrapper{
|
||||||
|
display: flex;
|
||||||
|
align-content: right;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-action-button{
|
||||||
|
flex: 0 0 auto;
|
||||||
|
margin-left: auto;
|
||||||
|
justify-content: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************** LIST HEADER */
|
||||||
|
.c-fault-mgmt__list-header{
|
||||||
|
display: flex;
|
||||||
|
background: rgba($colorBodyFg, .23);
|
||||||
|
border-radius: $controlCr;
|
||||||
|
|
||||||
|
&-tripVal, &-liveVal, &-trigTime{
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-trigTime{
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
&-sortButton{
|
||||||
|
flex: 0 0 auto;
|
||||||
|
margin-left: auto;
|
||||||
|
justify-content: right;
|
||||||
|
display: flex;
|
||||||
|
align-content: right;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-severity-critical{
|
||||||
|
@include glyphBefore($glyph-icon-alert-triangle);
|
||||||
|
color: $colorStatusError;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-severity-warning{
|
||||||
|
@include glyphBefore($glyph-icon-alert-rect);
|
||||||
|
color: $colorStatusAlert;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-severity-watch{
|
||||||
|
@include glyphBefore($glyph-icon-info);
|
||||||
|
color: $colorCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-unacknowledged{
|
||||||
|
.c-fault-mgmt__list-severity{
|
||||||
|
@include pulse($animName: severityAnim, $dur: 200ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-selected {
|
||||||
|
background: $colorSelectedBg;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-shelved{
|
||||||
|
.c-fault-mgmt__list-content{
|
||||||
|
opacity: 60% !important;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.c-fault-mgmt__list-severity{
|
||||||
|
@include pulse($animName: shelvedAnim, $dur: 0ms);
|
||||||
|
}
|
||||||
|
}
|
52
src/plugins/faultManagement/pluginSpec.js
Normal file
52
src/plugins/faultManagement/pluginSpec.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2022, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import {
|
||||||
|
createOpenMct,
|
||||||
|
resetApplicationState
|
||||||
|
} from '../../utils/testing';
|
||||||
|
import { FAULT_MANAGEMENT_TYPE } from './constants';
|
||||||
|
|
||||||
|
describe("The Fault Management Plugin", () => {
|
||||||
|
let openmct;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
openmct = createOpenMct();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
return resetApplicationState(openmct);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('is not installed by default', () => {
|
||||||
|
let typeDef = openmct.types.get(FAULT_MANAGEMENT_TYPE).definition;
|
||||||
|
|
||||||
|
expect(typeDef.name).toBe('Unknown Type');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can be installed', () => {
|
||||||
|
openmct.install(openmct.plugins.FaultManagement());
|
||||||
|
let typeDef = openmct.types.get(FAULT_MANAGEMENT_TYPE).definition;
|
||||||
|
|
||||||
|
expect(typeDef.name).toBe('Fault Management');
|
||||||
|
});
|
||||||
|
});
|
@ -32,6 +32,7 @@ define([
|
|||||||
'./autoflow/AutoflowTabularPlugin',
|
'./autoflow/AutoflowTabularPlugin',
|
||||||
'./timeConductor/plugin',
|
'./timeConductor/plugin',
|
||||||
'../../example/imagery/plugin',
|
'../../example/imagery/plugin',
|
||||||
|
'../../example/faultManagment/exampleFaultSource',
|
||||||
'./imagery/plugin',
|
'./imagery/plugin',
|
||||||
'./summaryWidget/plugin',
|
'./summaryWidget/plugin',
|
||||||
'./URLIndicatorPlugin/URLIndicatorPlugin',
|
'./URLIndicatorPlugin/URLIndicatorPlugin',
|
||||||
@ -81,6 +82,7 @@ define([
|
|||||||
'./operatorStatus/plugin',
|
'./operatorStatus/plugin',
|
||||||
'./gauge/GaugePlugin',
|
'./gauge/GaugePlugin',
|
||||||
'./timelist/plugin',
|
'./timelist/plugin',
|
||||||
|
'./faultManagement/FaultManagementPlugin',
|
||||||
'../../example/exampleTags/plugin'
|
'../../example/exampleTags/plugin'
|
||||||
], function (
|
], function (
|
||||||
_,
|
_,
|
||||||
@ -94,6 +96,7 @@ define([
|
|||||||
AutoflowPlugin,
|
AutoflowPlugin,
|
||||||
TimeConductorPlugin,
|
TimeConductorPlugin,
|
||||||
ExampleImagery,
|
ExampleImagery,
|
||||||
|
ExampleFaultSource,
|
||||||
ImageryPlugin,
|
ImageryPlugin,
|
||||||
SummaryWidget,
|
SummaryWidget,
|
||||||
URLIndicatorPlugin,
|
URLIndicatorPlugin,
|
||||||
@ -143,6 +146,7 @@ define([
|
|||||||
OperatorStatus,
|
OperatorStatus,
|
||||||
GaugePlugin,
|
GaugePlugin,
|
||||||
TimeList,
|
TimeList,
|
||||||
|
FaultManagementPlugin,
|
||||||
ExampleTags
|
ExampleTags
|
||||||
) {
|
) {
|
||||||
const plugins = {};
|
const plugins = {};
|
||||||
@ -150,6 +154,7 @@ define([
|
|||||||
plugins.example = {};
|
plugins.example = {};
|
||||||
plugins.example.ExampleUser = ExampleUser.default;
|
plugins.example.ExampleUser = ExampleUser.default;
|
||||||
plugins.example.ExampleImagery = ExampleImagery.default;
|
plugins.example.ExampleImagery = ExampleImagery.default;
|
||||||
|
plugins.example.ExampleFaultSource = ExampleFaultSource.default;
|
||||||
plugins.example.EventGeneratorPlugin = EventGeneratorPlugin.default;
|
plugins.example.EventGeneratorPlugin = EventGeneratorPlugin.default;
|
||||||
plugins.example.ExampleTags = ExampleTags.default;
|
plugins.example.ExampleTags = ExampleTags.default;
|
||||||
plugins.example.Generator = () => GeneratorPlugin;
|
plugins.example.Generator = () => GeneratorPlugin;
|
||||||
@ -189,6 +194,7 @@ define([
|
|||||||
plugins.Notebook = Notebook.NotebookPlugin;
|
plugins.Notebook = Notebook.NotebookPlugin;
|
||||||
plugins.RestrictedNotebook = Notebook.RestrictedNotebookPlugin;
|
plugins.RestrictedNotebook = Notebook.RestrictedNotebookPlugin;
|
||||||
plugins.DisplayLayout = DisplayLayoutPlugin.default;
|
plugins.DisplayLayout = DisplayLayoutPlugin.default;
|
||||||
|
plugins.FaultManagement = FaultManagementPlugin.default;
|
||||||
plugins.FormActions = FormActions;
|
plugins.FormActions = FormActions;
|
||||||
plugins.FolderView = FolderView;
|
plugins.FolderView = FolderView;
|
||||||
plugins.Tabs = Tabs;
|
plugins.Tabs = Tabs;
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
@import "./notebook.scss";
|
@import "./notebook.scss";
|
||||||
@import "../plugins/notebook/components/sidebar.scss";
|
@import "../plugins/notebook/components/sidebar.scss";
|
||||||
@import "../plugins/gauge/gauge.scss";
|
@import "../plugins/gauge/gauge.scss";
|
||||||
|
@import "../plugins/faultManagement/fault-manager.scss";
|
||||||
@import "../plugins/operatorStatus/operator-status";
|
@import "../plugins/operatorStatus/operator-status";
|
||||||
|
|
||||||
#splash-screen {
|
#splash-screen {
|
||||||
|
@ -21,7 +21,10 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="c-inspect-properties c-inspect-properties--location">
|
<div
|
||||||
|
v-if="originalPath.length"
|
||||||
|
class="c-inspect-properties c-inspect-properties--location"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="c-inspect-properties__header"
|
class="c-inspect-properties__header"
|
||||||
title="The location of this linked object."
|
title="The location of this linked object."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user