open-nomad/ui/mirage/utils.js
Jai 7690fda6ba
Epic: Evaluation Detail Sidebar (#12370)
* chore: prettify gutter-menu

* chore:  add portal packages

* styling:  add styles sidebar and portal behavior

* ui:  sidebar component

* ui:  create and implement statechart for evals

* ui:  actor-relationship service and provider component

* ui:  d3 hierarchy computation

* chore:  add render-modifiers and curved arrows

* ui:  create evaluation actor div

* fix related evaluations schema

* ui:  register/deregister evaluation divs

* ui:  handle resize behavior

* bug:  infinite re-render cycle

* fix:  conditional logic to prevent infinite render of flex resizing

* ui: related evaluations schema and request param

* ui: fix testing for evaluations

* refact: make related-evals a proper has-many

* chore: don't pauseTest

* temp:  debug d3 hierarchy

* ui:  move derived state logic into backing component class for detail

* ui:  deprecated related evaluations logic in statechart

* ui:  update evaluation models

* ui:  update logic to paint svg in non-viewable scroll region

* ui:  update styling

* ui:  testing for eval detail view

* ui:  delete detail from template directory

* ui:  break detail component down

* ui:  static data for /evaluation/:id endpoint

* ui:  fix styling of d3 viz

* ui:  add query parameter adapter for evals

* ui:  last minute design requests

* wip:  address browser updating detail view behavior

* refact: handle query-state change in statechart

* conditional class looking for currentEval equality (#12411)

* F UI/evaluation detail sidebar rel evals (#12415)

* ui:  remove busy id alias from statechart

* ui: edit related evaluations viz error message

* ui:  bug fixes on related evaluations view (#12423)

* ui:  remove busy id alias from statechart

* ui: edit related evaluations viz error message

* ui:  update error state

* ui:  related evaluation outline styling

* Related evaluation stylefile and non-link if it matches the active sidebar (#12428)

* Adds tabbable and keyboard pressable evaluation table rows (#12433)

* ui:  fix failing eval list tests (#12437)

* ui:  move styling into classes (#12438)

* fix test failures (#12444)

* ui:  move styling into classes

* ui:  eslint disable

* ui:  allocations have evaluations as async relationships

* ui:  fix evaluation refresh button (#12447)

* ui:  move styling into classes

* ui:  eslint disable

* ui:  allocations have evaluations as async relationships

* ui:  refresh bug

* ui:  final touches on sidebar (#12462)

* chore: turn off template linting rules

Temporarily turning off template linting because we dont have a set CSS convention and the release needs to go out ASAP.

* doc:  deprecate out of date comments and vars

* ui:  edit mirage server fetch logic

* ui:  style sidebar relative

* Modification to mocked related evals and manually set 100% height on svg (#12460)

* F UI/evaluation detail sidebar final touches (#12463)

* chore: turn off template linting rules

Temporarily turning off template linting because we dont have a set CSS convention and the release needs to go out ASAP.

* doc:  deprecate out of date comments and vars

* ui:  edit mirage server fetch logic

* ui:  style sidebar relative

* ui:  account for new related eval added to chain

Co-authored-by: Michael Klein <michael@firstiwaslike.com>
Co-authored-by: Phil Renaud <phil@riotindustries.com>
2022-04-05 14:34:37 -04:00

491 lines
14 KiB
JavaScript

import faker from 'nomad-ui/mirage/faker';
export function provide(count, provider) {
if (typeof count === 'function') {
count = count();
}
return Array(count).fill(null).map(provider);
}
export function provider() {
return () => provide(...arguments);
}
export function pickOne(list) {
return list[faker.random.number(list.length - 1)];
}
export function arrToObj(prop, alias = '') {
return (obj, element) => {
const name = element[prop];
delete element[prop];
obj[name] = alias ? element[alias] : element;
return obj;
};
}
export const generateAcceptanceTestEvalMock = (id) => {
return {
CreateIndex: 20,
CreateTime: 1647899150314738000,
ID: id,
JobID: 'example',
JobModifyIndex: 10,
ModifyIndex: 31,
ModifyTime: 1647899318007569000,
Namespace: 'default',
NextEval: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
PreviousEval: 'd8a5c14f-120a-3d83-6305-90927356dd6c',
Priority: 50,
RelatedEvals: [
{
BlockedEval: '',
CreateIndex: 31,
CreateTime: 1647899318007563000,
DeploymentID: '',
ID: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
JobID: 'example',
ModifyIndex: 44,
ModifyTime: 1647899591412413000,
Namespace: 'default',
NextEval: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
NodeID: '',
PreviousEval: id,
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 31,
CreateTime: 1647899318007563000,
DeploymentID: '',
ID: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef-deux',
JobID: 'example',
ModifyIndex: 44,
ModifyTime: 1647899591412413000,
Namespace: 'default',
NextEval: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
NodeID: '',
PreviousEval: id,
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 10,
CreateTime: 1647899129298997000,
DeploymentID: '',
ID: 'd8a5c14f-120a-3d83-6305-90927356dd6c',
JobID: 'example',
ModifyIndex: 20,
ModifyTime: 1647899150314745000,
Namespace: 'default',
NextEval: id,
NodeID: '',
PreviousEval: '',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'job-register',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 44,
CreateTime: 1647899591412410000,
DeploymentID: '',
ID: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
JobID: 'example',
ModifyIndex: 53,
ModifyTime: 1647899729480596000,
Namespace: 'default',
NextEval: 'e49bf53c-da6a-c869-8317-f2089682f503',
NodeID: '',
PreviousEval: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 53,
CreateTime: 1647899729480592000,
DeploymentID: '',
ID: 'e49bf53c-da6a-c869-8317-f2089682f503',
JobID: 'example',
ModifyIndex: 64,
ModifyTime: 1647899881302731000,
Namespace: 'default',
NextEval: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
NodeID: '',
PreviousEval: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 64,
CreateTime: 1647899881302723000,
DeploymentID: '',
ID: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
JobID: 'example',
ModifyIndex: 81,
ModifyTime: 1647900212725381000,
Namespace: 'default',
NextEval: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
NodeID: '',
PreviousEval: 'e49bf53c-da6a-c869-8317-f2089682f503',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 81,
CreateTime: 1647900212725376000,
DeploymentID: '',
ID: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
JobID: 'example',
ModifyIndex: 97,
ModifyTime: 1647900516944239000,
Namespace: 'default',
NextEval: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
NodeID: '',
PreviousEval: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 97,
CreateTime: 1647900516944236000,
DeploymentID: '',
ID: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
JobID: 'example',
ModifyIndex: 114,
ModifyTime: 1647900825385587000,
Namespace: 'default',
NextEval: 'ea2239aa-26d6-8874-8c56-e1600585772b',
NodeID: '',
PreviousEval: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 114,
CreateTime: 1647900825385584000,
DeploymentID: '',
ID: 'ea2239aa-26d6-8874-8c56-e1600585772b',
JobID: 'example',
ModifyIndex: 128,
ModifyTime: 1647900979511304000,
Namespace: 'default',
NextEval: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
NodeID: '',
PreviousEval: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 128,
CreateTime: 1647900979511301000,
DeploymentID: '',
ID: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
JobID: 'example',
ModifyIndex: 136,
ModifyTime: 1647901211369652000,
Namespace: 'default',
NextEval: '1fded690-20ad-6afa-3b89-59e319dfce18',
NodeID: '',
PreviousEval: 'ea2239aa-26d6-8874-8c56-e1600585772b',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 136,
CreateTime: 1647901211369648000,
DeploymentID: '',
ID: '1fded690-20ad-6afa-3b89-59e319dfce18',
JobID: 'example',
ModifyIndex: 136,
ModifyTime: 1647901211369648000,
Namespace: 'default',
NextEval: '',
NodeID: '',
PreviousEval: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
Priority: 50,
Status: 'pending',
StatusDescription: '',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
],
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
Wait: 20000000000,
};
};
export const MOCK_EVALUATION = {
CreateIndex: 20,
CreateTime: 1647899150314738000,
ID: 'fede162c-26a6-c108-178b-1c140f9f5680',
JobID: 'example',
JobModifyIndex: 10,
ModifyIndex: 31,
ModifyTime: 1647899318007569000,
Namespace: 'default',
NextEval: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
PreviousEval: 'd8a5c14f-120a-3d83-6305-90927356dd6c',
Priority: 50,
RelatedEvals: [
{
BlockedEval: '',
CreateIndex: 31,
CreateTime: 1647899318007563000,
DeploymentID: '',
ID: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
JobID: 'example',
ModifyIndex: 44,
ModifyTime: 1647899591412413000,
Namespace: 'default',
NextEval: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
NodeID: '',
PreviousEval: 'fede162c-26a6-c108-178b-1c140f9f5680',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 10,
CreateTime: 1647899129298997000,
DeploymentID: '',
ID: 'd8a5c14f-120a-3d83-6305-90927356dd6c',
JobID: 'example',
ModifyIndex: 20,
ModifyTime: 1647899150314745000,
Namespace: 'default',
NextEval: 'fede162c-26a6-c108-178b-1c140f9f5680',
NodeID: '',
PreviousEval: '',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'job-register',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 44,
CreateTime: 1647899591412410000,
DeploymentID: '',
ID: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
JobID: 'example',
ModifyIndex: 53,
ModifyTime: 1647899729480596000,
Namespace: 'default',
NextEval: 'e49bf53c-da6a-c869-8317-f2089682f503',
NodeID: '',
PreviousEval: 'fd1cd898-d655-c7e4-17f6-a1a2e98b18ef',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 53,
CreateTime: 1647899729480592000,
DeploymentID: '',
ID: 'e49bf53c-da6a-c869-8317-f2089682f503',
JobID: 'example',
ModifyIndex: 64,
ModifyTime: 1647899881302731000,
Namespace: 'default',
NextEval: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
NodeID: '',
PreviousEval: 'cac7dfa0-b79b-ee55-c86a-0ca89dffb9e1',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 64,
CreateTime: 1647899881302723000,
DeploymentID: '',
ID: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
JobID: 'example',
ModifyIndex: 81,
ModifyTime: 1647900212725381000,
Namespace: 'default',
NextEval: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
NodeID: '',
PreviousEval: 'e49bf53c-da6a-c869-8317-f2089682f503',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 81,
CreateTime: 1647900212725376000,
DeploymentID: '',
ID: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
JobID: 'example',
ModifyIndex: 97,
ModifyTime: 1647900516944239000,
Namespace: 'default',
NextEval: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
NodeID: '',
PreviousEval: 'a8d29cfc-517c-2e4c-9722-b47e84152c64',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 97,
CreateTime: 1647900516944236000,
DeploymentID: '',
ID: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
JobID: 'example',
ModifyIndex: 114,
ModifyTime: 1647900825385587000,
Namespace: 'default',
NextEval: 'ea2239aa-26d6-8874-8c56-e1600585772b',
NodeID: '',
PreviousEval: 'b37d06e4-4eb4-b29d-3b4a-b0c7bf2528ad',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 114,
CreateTime: 1647900825385584000,
DeploymentID: '',
ID: 'ea2239aa-26d6-8874-8c56-e1600585772b',
JobID: 'example',
ModifyIndex: 128,
ModifyTime: 1647900979511304000,
Namespace: 'default',
NextEval: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
NodeID: '',
PreviousEval: 'd7c50aa5-5bf1-5119-d7e7-0d0ae5381856',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 128,
CreateTime: 1647900979511301000,
DeploymentID: '',
ID: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
JobID: 'example',
ModifyIndex: 136,
ModifyTime: 1647901211369652000,
Namespace: 'default',
NextEval: '1fded690-20ad-6afa-3b89-59e319dfce18',
NodeID: '',
PreviousEval: 'ea2239aa-26d6-8874-8c56-e1600585772b',
Priority: 50,
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
{
BlockedEval: '',
CreateIndex: 136,
CreateTime: 1647901211369648000,
DeploymentID: '',
ID: '1fded690-20ad-6afa-3b89-59e319dfce18',
JobID: 'example',
ModifyIndex: 136,
ModifyTime: 1647901211369648000,
Namespace: 'default',
NextEval: '',
NodeID: '',
PreviousEval: '25a2dd19-8d22-d1dd-280a-79860c9b8bdb',
Priority: 50,
Status: 'pending',
StatusDescription: '',
TriggeredBy: 'failed-follow-up',
Type: 'service',
WaitUntil: null,
},
],
Status: 'failed',
StatusDescription: 'evaluation reached delivery limit (3)',
TriggeredBy: 'failed-follow-up',
Type: 'service',
Wait: 20000000000,
};