-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BACKPORT] Integrations from main #638
Changes from all commits
00bc374
4a233c6
9b31057
ec8310b
01b88a5
60c5d7e
55abc00
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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'); | ||
}) | ||
}); | ||
|
||
|
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 | ||
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']; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. these fields shouldn’t be hard coded... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep, I know, we can fix it later. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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'; | ||
|
@@ -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 = | ||
|
@@ -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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this is not used as well. We can remove this |
||
export const OPENSEARCH_PANELS_API = { | ||
OBJECT: `${BASE_OBSERVABILITY_URI}/object`, | ||
}; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not part of main branch