Skip to content

Commit

Permalink
Add vis layer interfaces
Browse files Browse the repository at this point in the history
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
  • Loading branch information
ohltyler committed Dec 22, 2022
1 parent ba6f9eb commit d42e4fe
Show file tree
Hide file tree
Showing 11 changed files with 246 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import { render } from './render';
import { shape } from './shape';
import { string } from './string';
import { style } from './style';
import { visLayers } from './vis_layers';
import { AnyExpressionTypeDefinition } from '../types';

export const typeSpecs: AnyExpressionTypeDefinition[] = [
Expand All @@ -63,6 +64,7 @@ export const typeSpecs: AnyExpressionTypeDefinition[] = [
shape,
string,
style,
visLayers,
];

export * from './boolean';
Expand All @@ -81,3 +83,4 @@ export * from './render';
export * from './shape';
export * from './string';
export * from './style';
export * from './vis_layers';
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { ExpressionTypeDefinition } from '../types';
import { VisLayers } from '../../../../../../src/plugins/plugin_integration/common';

const name = 'vis_layers';

export interface ExprVisLayers {
type: typeof name;
layers: VisLayers;
}

// Setting default empty arrays for null & undefined edge cases
export const visLayers: ExpressionTypeDefinition<typeof name, ExprVisLayers> = {
name,
from: {
null: () => {
return {
type: name,
layers: [] as VisLayers,
} as ExprVisLayers;
},
undefined: () => {
return {
type: name,
layers: [] as VisLayers,
} as ExprVisLayers;
},
},
};
1 change: 1 addition & 0 deletions src/plugins/expressions/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,5 +132,6 @@ export {
TypeString,
TypeToString,
UnmappedTypeStrings,
ExprVisLayers,
ExpressionValueRender as Render,
} from '../common';
15 changes: 15 additions & 0 deletions src/plugins/plugin_integration/common/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

export {
VisLayer,
VisLayers,
PointInTimeEventsVisLayer,
PointInTimeEvent,
PointInTimeEventMetadata,
isPointInTimeEventsVisLayer,
VisLayerResponseValue,
VisLayerFunctionDefinition,
} from './types';
33 changes: 33 additions & 0 deletions src/plugins/plugin_integration/common/types.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { VisLayer, isPointInTimeEventsVisLayer } from './types';

describe('isPointInTimeEventsVisLayer()', function () {
it('should return false if no events field', function () {
const visLayer = {
id: 'visLayerId',
name: 'visLayerName',
field1: 'value1',
field2: 'value2',
} as VisLayer;
expect(isPointInTimeEventsVisLayer(visLayer)).toBe(false);
});

it('should return true if events field exists', function () {
const visLayer = {
id: 'testId',
name: 'testName',
events: [
{
timestamp: 123,
resourceId: 'testId',
resourceName: 'testName',
},
],
} as VisLayer;
expect(isPointInTimeEventsVisLayer(visLayer)).toBe(true);
});
});
47 changes: 47 additions & 0 deletions src/plugins/plugin_integration/common/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { ExpressionFunctionDefinition } from '../../expressions';

export interface VisLayer {
// will be used as the column ID
id: string;
// will be used as the name when hovering over the tooltip
name: string;
}

export type VisLayers = VisLayer[];

export interface PointInTimeEventMetadata {
resourceId: string;
resourceName: string;
tooltip?: string;
}

export interface PointInTimeEvent {
timestamp: number;
metadata: PointInTimeEventMetadata;
}

export interface PointInTimeEventsVisLayer extends VisLayer {
events: PointInTimeEvent[];
}

// used to determine what vis layer's interface is being implemented.
// currently PointInTimeEventsLayer is the only interface extending VisLayer
export const isPointInTimeEventsVisLayer = (obj: any) => {
return 'events' in obj;
};

export interface VisLayerResponseValue {
visLayers: object;
}

export type VisLayerFunctionDefinition = ExpressionFunctionDefinition<
string,
VisLayerResponseValue,
any,
Promise<VisLayerResponseValue>
>;
7 changes: 7 additions & 0 deletions src/plugins/plugin_integration/opensearch_dashboards.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "pluginIntegration",
"version": "opensearchDashboards",
"server": true,
"ui": true,
"requiredPlugins": ["data", "savedObjects", "opensearchDashboardsUtils"]
}
12 changes: 12 additions & 0 deletions src/plugins/plugin_integration/public/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { PluginInitializerContext } from 'src/core/public';
import { PluginIntegrationPlugin, PluginIntegrationSetup, PluginIntegrationStart } from './plugin';

export function plugin(initializerContext: PluginInitializerContext) {
return new PluginIntegrationPlugin(initializerContext);
}
export { PluginIntegrationSetup, PluginIntegrationStart };
45 changes: 45 additions & 0 deletions src/plugins/plugin_integration/public/plugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/public';
import { DataPublicPluginSetup, DataPublicPluginStart } from '../../data/public';

// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface PluginIntegrationSetup {}

// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface PluginIntegrationStart {}

export interface PluginIntegrationSetupDeps {
data: DataPublicPluginSetup;
}

export interface PluginIntegrationStartDeps {
data: DataPublicPluginStart;
}

export class PluginIntegrationPlugin
implements
Plugin<
PluginIntegrationSetup,
PluginIntegrationStart,
PluginIntegrationSetupDeps,
PluginIntegrationStartDeps
> {
constructor(initializerContext: PluginInitializerContext) {}

public setup(
core: CoreSetup<PluginIntegrationStartDeps, PluginIntegrationStart>,
{ data }: PluginIntegrationSetupDeps
): PluginIntegrationSetup {
return {};
}

public start(core: CoreStart, { data }: PluginIntegrationStartDeps): PluginIntegrationStart {
return {};
}

public stop() {}
}
12 changes: 12 additions & 0 deletions src/plugins/plugin_integration/server/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { PluginInitializerContext } from '../../../core/server';
import { PluginIntegrationPlugin } from './plugin';

export function plugin(initializerContext: PluginInitializerContext) {
return new PluginIntegrationPlugin(initializerContext);
}
export { PluginIntegrationPluginSetup, PluginIntegrationPluginStart } from './plugin';
38 changes: 38 additions & 0 deletions src/plugins/plugin_integration/server/plugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import {
PluginInitializerContext,
CoreSetup,
CoreStart,
Plugin,
Logger,
} from '../../../core/server';

// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface PluginIntegrationPluginSetup {}
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface PluginIntegrationPluginStart {}

export class PluginIntegrationPlugin
implements Plugin<PluginIntegrationPluginSetup, PluginIntegrationPluginStart> {
private readonly logger: Logger;

constructor(initializerContext: PluginInitializerContext) {
this.logger = initializerContext.logger.get();
}

public setup(core: CoreSetup) {
this.logger.debug('pluginIntegration: Setup');
return {};
}

public start(core: CoreStart) {
this.logger.debug('pluginIntegration: Started');
return {};
}

public stop() {}
}

0 comments on commit d42e4fe

Please sign in to comment.