Skip to content

Commit

Permalink
[BACKPORT] Integrations from main (#638)
Browse files Browse the repository at this point in the history
* Merge pull request #547 from Swiddis/osints/main

Stub router for integrations project

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge pull request #552 from Swiddis/osints/main

Merge in repository classes from osints/dev

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge pull request #559 from Swiddis/copy-repository

Copy integrations repository content

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge pull request #583 from Swiddis/osints/sanitize-paths

Copy path sanitization from osints/dev

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge pull request #615 from Swiddis/osints/main

Merge sample data endpoint from osints/dev

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge pull request #618 from Swiddis/osints/frontend

Merge Frontend for OpenSearch Integrations

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge frontend from osints/dev (#636)

* Remove unused NDJson parsing code

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove unused instance store

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Move repository logic to own class

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add tests for IntegrationsRepository

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add tests for kibana backend

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Clear repository between runs in testing

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* fix tests and import

Signed-off-by: Derek Ho <dxho@amazon.com>

* add sanity test cypress test

Signed-off-by: Derek Ho <dxho@amazon.com>

* clean up code

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add tests for integration builder

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Swap jest test to it

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* {
  "attributes": {
    "description": "Nginx dashboard with basic Observability on access / error logs",
    "hits": 0,
    "kibanaSavedObjectMeta": {
      "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"
    },
    "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":true}",
    "panelsJSON": "[{\"version\":\"2.5.0\",\"gridData\":{\"h\":8,\"i\":\"1f31e50b-06e3-41e6-972e-e4e5fe1a9872\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"1f31e50b-06e3-41e6-972e-e4e5fe1a9872\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"2.5.0\",\"gridData\":{\"h\":9,\"i\":\"d91a8da4-b34b-470a-aca6-9c76b47cd6fb\",\"w\":24,\"x\":0,\"y\":8},\"panelIndex\":\"d91a8da4-b34b-470a-aca6-9c76b47cd6fb\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"2.5.0\",\"gridData\":{\"h\":15,\"i\":\"27149e5a-3a77-4f3c-800e-8a160c3765f4\",\"w\":24,\"x\":24,\"y\":8},\"panelIndex\":\"27149e5a-3a77-4f3c-800e-8a160c3765f4\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.5.0\",\"gridData\":{\"x\":0,\"y\":17,\"w\":24,\"h\":15,\"i\":\"4d8c2aa7-159c-4a1a-80ff-00a9299056ce\"},\"panelIndex\":\"4d8c2aa7-159c-4a1a-80ff-00a9299056ce\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"2.5.0\",\"gridData\":{\"x\":24,\"y\":23,\"w\":24,\"h\":15,\"i\":\"800b7f19-f50c-417f-8987-21b930531cbe\"},\"panelIndex\":\"800b7f19-f50c-417f-8987-21b930531cbe\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]",
    "timeRestore": false,
    "title": "[NGINX Core Logs 1.0] Overview",
    "version": 1
  },
  "id": "96847220-5261-44d0-89b4-65f3a659f13a",
  "migrationVersion": {
    "dashboard": "7.9.3"
  },
  "references": [
    {
      "id": "3b49a65d-54d8-483d-a8f0-3d7c855e1ecf",
      "name": "panel_0",
      "type": "visualization"
    },
    {
      "id": "865e577b-634b-4a65-b9d6-7e324c395d18",
      "name": "panel_1",
      "type": "visualization"
    },
    {
      "id": "dc1803f0-b478-11ed-9063-ebe46f9ac203",
      "name": "panel_2",
      "type": "visualization"
    },
    {
      "id": "99acc580-b47a-11ed-9063-ebe46f9ac203",
      "name": "panel_3",
      "type": "visualization"
    },
    {
      "id": "01ea64d0-b62f-11ed-a677-43d7aa86763b",
      "name": "panel_4",
      "type": "visualization"
    }
  ],
  "type": "dashboard",
  "updated_at": "2023-02-26T23:44:09.855Z",
  "version": "WzczLDdd"
}

Signed-off-by: Derek Ho <dxho@amazon.com>

* Stub out sample integration data for front-end

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Use more realistic integration sample

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add full traversal to fields list

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add license to integration template

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* add some unit testing framework

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix up the testing name

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix up table view and add a test

Signed-off-by: Derek Ho <dxho@amazon.com>

* add an added integration table test using dummy data

Signed-off-by: Derek Ho <dxho@amazon.com>

* add integration specific types and clean up code

Signed-off-by: Derek Ho <dxho@amazon.com>

* clean up code and use integration specific types

Signed-off-by: Derek Ho <dxho@amazon.com>

* Route integrations page to actual repository

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Remove unused import

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Use loading spinner

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* add some changes to UI according to figma

Signed-off-by: Derek Ho <dxho@amazon.com>

* add license headers and hook up get to specific instance for added page

Signed-off-by: Derek Ho <dxho@amazon.com>

* add screenshots and fix up mappings and breadcrumbs

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add failing test case for empty object

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Make template test pass

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* use flyout according to figma and connect flyout input to backend creation

Signed-off-by: Derek Ho <dxho@amazon.com>

* implement delete

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix up tests for changes

Signed-off-by: Derek Ho <dxho@amazon.com>

* get added page to working order

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add template validator via Ajv

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix builder tests for new validation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* add unit test coverage

Signed-off-by: Derek Ho <dxho@amazon.com>

* update page and tests to remove added by for integration instances

Signed-off-by: Derek Ho <dxho@amazon.com>

* deleting an instance also deletes its children saved objects

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add integration instance validation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* update components and snapshots with data-test-subj for cypress tests and add more comprehensive cypress test suite

Signed-off-by: Derek Ho <dxho@amazon.com>

* remove unecessary console logging

Signed-off-by: Derek Ho <dxho@amazon.com>

* Hotfix: Minor code cleanup

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* dynamically handle id generation to allow for multiple instances of the same template to be created

Signed-off-by: Derek Ho <dxho@amazon.com>

* Update integration with fixed panels

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Apply minor behavior tweaks

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Refactor repository for new format

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* fix empty assets bug

Signed-off-by: Derek Ho <dxho@amazon.com>

* Write basic FS latest integration queries

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Update integration template type and validator

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add template retrieval to repository fs

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add copyright notice to repository_fs

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* fix escape

Signed-off-by: Derek Ho <dxho@amazon.com>

* revert file

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix test

Signed-off-by: Derek Ho <dxho@amazon.com>

* Stub composite repository class

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Apply minor condition refactor

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fill in basic implementation for integration class

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add tests for integration class

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix type errors on repository tests

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Patch: Handle files with invalid version formats

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Refactor displayAssets to assets

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add basic getAssets implementation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add handling for invalid config error case

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add handling for failed saved object loading

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add basic getStatic method

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix handling for missing statics

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove outdated repository classes

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add docs for the integration class

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hook up router to new static loading

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Clarify content-type docs

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix details page crashes due to outdated schema

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Infer mime type for statics

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix screenshot loading on integrations details page

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Remove mimetypes from nginx 1.0.0

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add getSchemas method with tests

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Make minor modifications to integration typing

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add integration deep check

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Refactor integration builder

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix remap ID method

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix loading process

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Refactor tests for new integrations backend

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix type errors in test suite

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* hook up datasource creation from flyout to backend

Signed-off-by: Derek Ho <dxho@amazon.com>

* remove nullable

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add schema route to router

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix frontend request routing for new API

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Fix added integration errors

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Add an actual screenshot

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Remove unused assets folder

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Use Oui images

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Make integration instance deletion more robust

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove asset map (again

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix remap data source

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Correct deletion for actual 404 behavior

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add display name field to integrations

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Apply display name through frontend

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Use display name on table view

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove unused code in flyout

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Stub mapping validation on frontend

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add error message for failed validation result

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix request to proxy

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add more detailed handling for missing schemas

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Apply integration type in validation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add full schema validation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add unit tests for mapping validation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix type checking in unit tests

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* create dataSource UI option

Signed-off-by: Derek Ho <dxho@amazon.com>

* Hotfix: Update route for listing added integrations

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Fix component tests

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add basic status querying

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add unit tests for availability queries

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* create ss4o index from ui

Signed-off-by: Derek Ho <dxho@amazon.com>

* code cleanup

Signed-off-by: Derek Ho <dxho@amazon.com>

* use user input

Signed-off-by: Derek Ho <dxho@amazon.com>

* Hotfix: Sync package versions with osd

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix path-dependent tests on windows

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Repair template naming on index autocreation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Allow wildcards in index pattern specification

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Remove redundant integrationType field

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Remove unused schema files

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Add sample data

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* move integrations under core (pending ux)

Signed-off-by: Derek Ho <dxho@amazon.com>

* Fix handling for templates on create

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Merge in kibana backend from osints/dev

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add integration type to .kibana from osints/dev

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Re-add license header

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* hook up toast

Signed-off-by: Derek Ho <dxho@amazon.com>

* Update integration-instance type

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Fix types again

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Fix cypress

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add sample data endpoint

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add license checking to eslint

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Created elb integration

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* successfully hook up toast and block until done with for loop

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix and fix test

Signed-off-by: Derek Ho <dxho@amazon.com>

* Added screenshot of elb integration`

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* Updated aws_elb descriptions and logos

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* Deleted .DS_Store

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* Added container in components

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* Merged markers

Signed-off-by: Daniel Dong <danieldong51@amazon.com>

* Hotfix: Rename installed integrations to added integrations

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Hotfix: Revert Nginx sample prettifying

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* remove console.log

Signed-off-by: Derek Ho <dxho@amazon.com>

* updates cypress test to test create data source flow with toast

Signed-off-by: Derek Ho <dxho@amazon.com>

* update snapshot based on cypress changes

Signed-off-by: Derek Ho <dxho@amazon.com>

* get rid of extra line

Signed-off-by: Derek Ho <dxho@amazon.com>

* update according to figma

Signed-off-by: Derek Ho <dxho@amazon.com>

* Fix integrations type

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Sanitize file path for getting integration statics

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Update tests for merge

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* make some UX improvements

Signed-off-by: Derek Ho <dxho@amazon.com>

* Add basic sample data loading

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* moves integration on left nav, removes unused create flow

Signed-off-by: Derek Ho <dxho@amazon.com>

* hook up sample data to a standalone button

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* implement length validation and update tests accordingly

Signed-off-by: Derek Ho <dxho@amazon.com>

* disable buttons while adding

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix breadcrumbs and tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* update according to figma

Signed-off-by: Derek Ho <dxho@amazon.com>

* maek some changes according to figma

Signed-off-by: Derek Ho <dxho@amazon.com>

* implement tabbing for both added/available and fields/assets

Signed-off-by: Derek Ho <dxho@amazon.com>

* remove status on template, change status to badge on instance and hook up type filtering for added

Signed-off-by: Derek Ho <dxho@amazon.com>

* remove actions

Signed-off-by: Derek Ho <dxho@amazon.com>

* convert to badges

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* remove columns from table

Signed-off-by: Derek Ho <dxho@amazon.com>

* add linking to all assets

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix unit and integration tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* final fix up

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix filtering

Signed-off-by: Derek Ho <dxho@amazon.com>

* final fix up

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* add cateogry filter and fix tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix cypress and unit tests

Signed-off-by: Derek Ho <dxho@amazon.com>

* Fix broken index template naming in sample creation

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add priority to logs mapping and fix index pattern

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* fix various UI and add validation

Signed-off-by: Derek Ho <dxho@amazon.com>

* add request metrics

Signed-off-by: Derek Ho <dxho@amazon.com>

* fix tests, remove console log

Signed-off-by: Derek Ho <dxho@amazon.com>

* add metrics to links and final UX fix up, test fixes

Signed-off-by: Derek Ho <dxho@amazon.com>

* add back installed

Signed-off-by: Derek Ho <dxho@amazon.com>

* Fix broken nginx panels

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* address pr comments

Signed-off-by: Derek Ho <dxho@amazon.com>

* address pr comments

Signed-off-by: Derek Ho <dxho@amazon.com>

* Hotfix: Fix constants

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Add learn more link to index field

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove unused AWS ELB integration

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove unused ELB constants

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Remove redundant EUI spacing

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* Fix snapshots

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

* fix relative path

Signed-off-by: Derek Ho <dxho@amazon.com>

---------

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>
Signed-off-by: Derek Ho <dxho@amazon.com>
Signed-off-by: Derek Ho <derek01778@gmail.com>
Signed-off-by: Daniel Dong <danieldong51@amazon.com>
Co-authored-by: Derek Ho <dxho@amazon.com>
Co-authored-by: Derek Ho <derek01778@gmail.com>
Co-authored-by: Daniel Dong <danieldong51@amazon.com>
Signed-off-by: Simeon Widdis <sawiddis@amazon.com>

---------

Signed-off-by: Simeon Widdis <sawiddis@amazon.com>
Signed-off-by: Derek Ho <dxho@amazon.com>
Signed-off-by: Derek Ho <derek01778@gmail.com>
Signed-off-by: Daniel Dong <danieldong51@amazon.com>
Co-authored-by: Derek Ho <dxho@amazon.com>
Co-authored-by: Derek Ho <derek01778@gmail.com>
Co-authored-by: Daniel Dong <danieldong51@amazon.com>
  • Loading branch information
4 people authored Jul 11, 2023
1 parent bdc4701 commit 55d9954
Show file tree
Hide file tree
Showing 69 changed files with 13,336 additions and 459 deletions.
114 changes: 114 additions & 0 deletions .cypress/integration/9_integrations.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

/// <reference types="cypress" />

import {
TEST_INTEGRATION_INSTANCE, TEST_SAMPLE_INSTANCE,
} from '../utils/constants';

let testInstanceSuffix = (Math.random() + 1).toString(36).substring(7);
let testInstance = `${TEST_INTEGRATION_INSTANCE}_${testInstanceSuffix}`;

const moveToIntegrationsHome = () => {
cy.visit(`${Cypress.env('opensearchDashboards')}/app/integrations#/available`);
};

const moveToAvailableNginxIntegration = () => {
cy.visit(`${Cypress.env('opensearchDashboards')}/app/integrations#/available/nginx`);
};

const moveToAddedIntegrations = () => {
cy.visit(`${Cypress.env('opensearchDashboards')}/app/integrations#/installed`);
};

const createSamples = () => {
moveToAvailableNginxIntegration();
cy.get('[data-test-subj="try-it-button"]').click();
cy.get('.euiToastHeader__title').should('contain', 'successfully');
}


describe('Basic sanity test for integrations plugin', () => {
it('Navigates to integrations plugin and expects the correct header', () => {
moveToIntegrationsHome();
cy.get('[data-test-subj="integrations-header"]').should('exist');
});

it('Navigates to integrations plugin and tests that clicking the nginx cards navigates to the nginx page', () => {
moveToIntegrationsHome();
cy.get('[data-test-subj="integration_card_nginx"]').click();
cy.url().should('include', '/available/nginx')
})

it('Navigates to nginx page and asserts the page to be as expected', () => {
moveToAvailableNginxIntegration();
cy.get('[data-test-subj="nginx-overview"]').should('exist')
cy.get('[data-test-subj="nginx-details"]').should('exist')
cy.get('[data-test-subj="nginx-screenshots"]').should('exist')
cy.get('[data-test-subj="nginx-assets"]').should('exist')
cy.get('[data-test-subj="fields"]').click();
cy.get('[data-test-subj="nginx-fields"]').should('exist')
})
});

describe('Tests the add nginx integration instance flow', () => {
it('Navigates to nginx page and triggers the adds the instance flow', () => {
createSamples();
moveToAvailableNginxIntegration();
cy.get('[data-test-subj="add-integration-button"]').click();
cy.get('[data-test-subj="new-instance-name"]').should('have.value', 'nginx');
cy.get('[data-test-subj="createInstanceButton"]').should('be.disabled')
cy.get('[data-test-subj="addIntegrationFlyoutTitle"]').should('exist')
// validates the created sample index
cy.get('[data-test-subj="data-source-name"]').type('ss4o_logs-nginx-sample-sample');
cy.get('[data-test-subj="validateIndex"]').click()
cy.get('[data-test-subj="new-instance-name"]').type(testInstance.substring(5));
cy.get('[data-test-subj="createInstanceButton"]').click();
cy.get('.euiToastHeader__title').should('contain', 'successfully');
})

it('Navigates to installed integrations page and verifies that nginx-test exists', () => {
moveToAddedIntegrations();
cy.contains(testInstance).should('exist');
cy.get(`[data-test-subj="${testInstance}IntegrationLink"]`).click();
})

it('Navigates to added integrations page and verifies that nginx-test exists and linked asset works as expected', () => {
moveToAddedIntegrations();
cy.contains(TEST_INTEGRATION_INSTANCE).should('exist');
cy.get(`[data-test-subj="${testInstance}IntegrationLink"]`).click();
cy.get(`[data-test-subj="IntegrationAssetLink"]`).click();
cy.url().should('include', '/dashboards#/')
})

it('Navigates to installed nginx-test instance page and deletes it', () => {
moveToAddedIntegrations();
cy.contains(testInstance).should('exist');
cy.get(`[data-test-subj="${testInstance}IntegrationLink"]`).click();
cy.get('[data-test-subj="deleteInstanceButton"]').click();

cy.get('button[data-test-subj="popoverModal__deleteButton"]').should('be.disabled');

cy.get('input.euiFieldText[placeholder="delete"]').focus().type('delete', {
delay: 50,
});
cy.get('button[data-test-subj="popoverModal__deleteButton"]').should('not.be.disabled');
cy.get('button[data-test-subj="popoverModal__deleteButton"]').click();
cy.get('.euiToastHeader__title').should('contain', 'successfully');
})
});

describe('Tests the add nginx integration instance flow', () => {
it('Navigates to nginx page and triggers the try it flow', () => {
moveToAvailableNginxIntegration();
cy.get('[data-test-subj="try-it-button"]').click();
cy.get('.euiToastHeader__title').should('contain', 'successfully');
moveToAddedIntegrations();
cy.contains(TEST_SAMPLE_INSTANCE).should('exist');
})
});


2 changes: 2 additions & 0 deletions .cypress/utils/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ export const setTimeFilter = (setEndTime = false, refresh = true) => {

// notebooks
export const TEST_NOTEBOOK = 'Test Notebook';
export const TEST_INTEGRATION_INSTANCE = 'nginx-test';
export const TEST_SAMPLE_INSTANCE = 'nginx-sample';
export const SAMPLE_URL = 'https://github.com/opensearch-project/sql/tree/main/sql-jdbc';
export const NOTEBOOK_TEXT = 'Use Notebooks to interactively and collaboratively develop rich reports backed by live data. Common use cases for notebooks includes creating postmortem reports, designing run books, building live infrastructure reports, or even documentation.';
export const OPENSEARCH_URL = 'https://opensearch.org/docs/latest/observability-plugin/notebooks/';
Expand Down
11 changes: 11 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
* SPDX-License-Identifier: Apache-2.0
*/

const LICENSE_HEADER = `/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/`;

module.exports = {
root: true,
extends: [
Expand All @@ -15,6 +20,12 @@ module.exports = {
files: ['**/*.{js,ts,tsx}'],
rules: {
'no-console': 0,
'@osd/eslint/require-license-header': [
'error',
{
licenses: [LICENSE_HEADER],
},
],
},
},
],
Expand Down
30 changes: 30 additions & 0 deletions .husky/_/husky.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/sh
if [ -z "$husky_skip_init" ]; then
debug () {
[ "$HUSKY_DEBUG" = "1" ] && echo "husky (debug) - $1"
}

readonly hook_name="$(basename "$0")"
debug "starting $hook_name..."

if [ "$HUSKY" = "0" ]; then
debug "HUSKY env variable is set to 0, skipping hook"
exit 0
fi

if [ -f ~/.huskyrc ]; then
debug "sourcing ~/.huskyrc"
. ~/.huskyrc
fi

export readonly husky_skip_init=1
sh -e "$0" "$@"
exitCode="$?"

if [ $exitCode != 0 ]; then
echo "husky - $hook_name hook exited with code $exitCode (error)"
exit $exitCode
fi

exit 0
fi
3 changes: 2 additions & 1 deletion common/constants/custom_panels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import { v4 as uuidv4 } from 'uuid';
export const CUSTOM_PANELS_API_PREFIX = '/api/observability/operational_panels';
export const CUSTOM_PANELS_DOCUMENTATION_URL =
'https://opensearch.org/docs/latest/observability-plugin/operational-panels/';
export const CREATE_PANEL_MESSAGE = 'Enter a name to describe the purpose of this Observability Dashboard.';
export const CREATE_PANEL_MESSAGE =
'Enter a name to describe the purpose of this Observability Dashboard.';

export const CUSTOM_PANELS_SAVED_OBJECT_TYPE = 'observability-panel';

Expand Down
11 changes: 11 additions & 0 deletions common/constants/integrations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

export const OPENSEARCH_DOCUMENTATION_URL = 'https://opensearch.org/docs/latest/integrations/index';
export const ASSET_FILTER_OPTIONS = ['index-pattern', 'search', 'visualization', 'dashboard'];
// TODO get this list dynamically from the API
export const INTEGRATION_TEMPLATE_OPTIONS = ['nginx'];
// TODO get this list dynamically from the API
export const INTEGRATION_CATEOGRY_OPTIONS = ['communication', 'http', 'cloud', 'container', 'logs'];
6 changes: 6 additions & 0 deletions common/constants/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export const DSL_SEARCH = '/search';
export const DSL_CAT = '/cat.indices';
export const DSL_MAPPING = '/indices.getFieldMapping';
export const OBSERVABILITY_BASE = '/api/observability';
export const INTEGRATIONS_BASE = '/api/integrations';
export const EVENT_ANALYTICS = '/event_analytics';
export const SAVED_OBJECTS = '/saved_objects';
export const SAVED_QUERY = '/query';
Expand Down Expand Up @@ -51,6 +52,10 @@ export const observabilityPanelsID = 'observability-dashboards';
export const observabilityPanelsTitle = 'Dashboards';
export const observabilityPanelsPluginOrder = 5095;

export const observabilityIntegrationsID = 'integrations';
export const observabilityIntegrationsTitle = 'Integrations';
export const observabilityIntegrationsPluginOrder = 9020;

// Shared Constants
export const SQL_DOCUMENTATION_URL = 'https://opensearch.org/docs/latest/search-plugins/sql/index/';
export const PPL_DOCUMENTATION_URL =
Expand All @@ -69,6 +74,7 @@ export const PPL_NEWLINE_REGEX = /[\n\r]+/g;

// Observability plugin URI
const BASE_OBSERVABILITY_URI = '/_plugins/_observability';
const BASE_INTEGRATIONS_URI = '/_plugins/_integrations'; // Used later in front-end for routing
export const OPENSEARCH_PANELS_API = {
OBJECT: `${BASE_OBSERVABILITY_URI}/object`,
};
Expand Down
9 changes: 8 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,33 @@
"@reduxjs/toolkit": "^1.6.1",
"ag-grid-community": "^27.3.0",
"ag-grid-react": "^27.3.0",
"ajv": "^8.11.0",
"antlr4": "4.8.0",
"antlr4ts": "^0.5.0-alpha.4",
"mime": "^3.0.0",
"performance-now": "^2.1.0",
"plotly.js-dist": "^2.2.0",
"postinstall": "^0.7.4",
"react-graph-vis": "^1.0.5",
"react-paginate": "^8.1.3",
"react-plotly.js": "^2.5.1",
"redux-persist": "^6.0.0"
"redux-persist": "^6.0.0",
"sanitize-filename": "^1.6.3"
},
"devDependencies": {
"@cypress/skip-test": "^2.6.1",
"@types/enzyme-adapter-react-16": "^1.0.6",
"@types/mime": "^3.0.1",
"@types/react-plotly.js": "^2.5.0",
"@types/react-test-renderer": "^16.9.1",
"@types/sanitize-filename": "^1.6.3",
"antlr4ts-cli": "^0.5.0-alpha.4",
"cypress": "^6.0.0",
"cypress-watch-and-reload": "^1.10.6",
"eslint": "^6.8.0",
"jest-dom": "^4.0.0",
"lint-staged": "^13.1.0",
"mock-fs": "^4.12.0",
"ts-jest": "^29.1.0"
},
"resolutions": {
Expand Down
2 changes: 2 additions & 0 deletions public/components/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { observabilityID, observabilityTitle } from '../../common/constants/shar
import { store } from '../framework/redux/store';
import { AppPluginStartDependencies } from '../types';
import { Home as ApplicationAnalyticsHome } from './application_analytics/home';
import { Home as IntegrationsHome } from './integrations/home';
import { MetricsListener } from './common/metrics_listener';
import { Home as CustomPanelsHome } from './custom_panels/home';
import { EventAnalytics } from './event_analytics';
Expand Down Expand Up @@ -42,6 +43,7 @@ const pages = {
traces: TraceAnalyticsHome,
notebooks: NotebooksHome,
dashboards: CustomPanelsHome,
integrations: IntegrationsHome,
};

export const App = ({
Expand Down
Loading

0 comments on commit 55d9954

Please sign in to comment.