123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- import {
- deleteHomepageQuery,
- updateHomepageQuery,
- } from 'sentry/actionCreators/discoverHomepageQueries';
- import {
- createSavedQuery,
- deleteSavedQuery,
- updateSavedQuery,
- } from 'sentry/actionCreators/discoverSavedQueries';
- import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator';
- import {Client} from 'sentry/api';
- import {t} from 'sentry/locale';
- import {NewQuery, Organization, SavedQuery} from 'sentry/types';
- import {trackAnalyticsEvent} from 'sentry/utils/analytics';
- import EventView from 'sentry/utils/discover/eventView';
- import {DisplayModes} from 'sentry/utils/discover/types';
- import {DisplayType} from 'sentry/views/dashboardsV2/types';
- export function handleCreateQuery(
- api: Client,
- organization: Organization,
- eventView: EventView,
- yAxis: string[],
- // True if this is a brand new query being saved
- // False if this is a modification from a saved query
- isNewQuery: boolean = true
- ): Promise<SavedQuery> {
- const payload = eventView.toNewQuery();
- payload.yAxis = yAxis;
- trackAnalyticsEvent({
- ...getAnalyticsCreateEventKeyName(isNewQuery, 'request'),
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- const promise = createSavedQuery(api, organization.slug, payload);
- promise
- .then((savedQuery: SavedQuery) => {
- addSuccessMessage(t('Query saved'));
- trackAnalyticsEvent({
- ...getAnalyticsCreateEventKeyName(isNewQuery, 'success'),
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- return savedQuery;
- })
- .catch((err: Error) => {
- addErrorMessage(t('Query not saved'));
- trackAnalyticsEvent({
- ...getAnalyticsCreateEventKeyName(isNewQuery, 'failed'),
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- error:
- (err && err.message) ||
- `Could not save a ${isNewQuery ? 'new' : 'existing'} query`,
- });
- });
- return promise;
- }
- const EVENT_NAME_EXISTING_MAP = {
- request: 'Discoverv2: Request to save a saved query as a new query',
- success: 'Discoverv2: Successfully saved a saved query as a new query',
- failed: 'Discoverv2: Failed to save a saved query as a new query',
- };
- const EVENT_NAME_NEW_MAP = {
- request: 'Discoverv2: Request to save a new query',
- success: 'Discoverv2: Successfully saved a new query',
- failed: 'Discoverv2: Failed to save a new query',
- };
- export function handleUpdateQuery(
- api: Client,
- organization: Organization,
- eventView: EventView,
- yAxis: string[]
- ): Promise<SavedQuery> {
- const payload = eventView.toNewQuery();
- payload.yAxis = yAxis;
- if (!eventView.name) {
- addErrorMessage(t('Please name your query'));
- return Promise.reject();
- }
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_request',
- eventName: 'Discoverv2: Request to update a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- const promise = updateSavedQuery(api, organization.slug, payload);
- promise
- .then((savedQuery: SavedQuery) => {
- addSuccessMessage(t('Query updated'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_success',
- eventName: 'Discoverv2: Successfully updated a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- // NOTE: there is no need to convert _saved into an EventView and push it
- // to the browser history, since this.props.eventView already
- // derives from location.
- return savedQuery;
- })
- .catch((err: Error) => {
- addErrorMessage(t('Query not updated'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_failed',
- eventName: 'Discoverv2: Failed to update a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- error: (err && err.message) || 'Failed to update a query',
- });
- });
- return promise;
- }
- /**
- * Essentially the same as handleUpdateQuery, but specifically for changing the
- * name of the query
- */
- export function handleUpdateQueryName(
- api: Client,
- organization: Organization,
- eventView: EventView
- ) {
- const payload = eventView.toNewQuery();
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_name_request',
- eventName: "Discoverv2: Request to update a saved query's name",
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- const promise = updateSavedQuery(api, organization.slug, payload);
- promise
- .then(_saved => {
- addSuccessMessage(t('Query name saved'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_name_success',
- eventName: "Discoverv2: Successfully updated a saved query's name",
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- });
- })
- .catch((err: Error) => {
- addErrorMessage(t('Query name not saved'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.update_query_failed',
- eventName: "Discoverv2: Failed to update a saved query's name",
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(payload),
- error: (err && err.message) || 'Failed to update a query name',
- });
- });
- return promise;
- }
- export function handleDeleteQuery(
- api: Client,
- organization: Organization,
- eventView: EventView
- ): Promise<void> {
- trackAnalyticsEvent({
- eventKey: 'discover_v2.delete_query_request',
- eventName: 'Discoverv2: Request to delete a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(eventView.toNewQuery()),
- });
- const promise = deleteSavedQuery(api, organization.slug, eventView.id!);
- promise
- .then(() => {
- addSuccessMessage(t('Query deleted'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.delete_query_success',
- eventName: 'Discoverv2: Successfully deleted a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(eventView.toNewQuery()),
- });
- })
- .catch((err: Error) => {
- addErrorMessage(t('Query not deleted'));
- trackAnalyticsEvent({
- eventKey: 'discover_v2.delete_query_failed',
- eventName: 'Discoverv2: Failed to delete a saved query',
- organization_id: parseInt(organization.id, 10),
- ...extractAnalyticsQueryFields(eventView.toNewQuery()),
- error: (err && err.message) || 'Failed to delete query',
- });
- });
- return promise;
- }
- export function handleUpdateHomepageQuery(
- api: Client,
- organization: Organization,
- query: NewQuery
- ) {
- const promise = updateHomepageQuery(api, organization.slug, query);
- return promise
- .then(savedQuery => {
- addSuccessMessage(t('Saved as Discover default'));
- return savedQuery;
- })
- .catch(() => {
- addErrorMessage(t('Unable to set query as Discover default'));
- });
- }
- export function handleResetHomepageQuery(api: Client, organization: Organization) {
- const promise = deleteHomepageQuery(api, organization.slug);
- return promise
- .then(() => {
- addSuccessMessage(t('Successfully removed Discover default'));
- })
- .catch(() => {
- addErrorMessage(t('Unable to remove Discover default'));
- });
- }
- export function getAnalyticsCreateEventKeyName(
- // True if this is a brand new query being saved
- // False if this is a modification from a saved query
- isNewQuery: boolean,
- type: 'request' | 'success' | 'failed'
- ) {
- const eventKey = isNewQuery
- ? 'discover_v2.save_new_query_' + type
- : 'discover_v2.save_existing_query_' + type;
- const eventName = isNewQuery ? EVENT_NAME_NEW_MAP[type] : EVENT_NAME_EXISTING_MAP[type];
- return {
- eventKey,
- eventName,
- };
- }
- /**
- * Takes in a DiscoverV2 NewQuery object and returns a Partial containing
- * the desired fields to populate into reload analytics
- */
- export function extractAnalyticsQueryFields(payload: NewQuery): Partial<NewQuery> {
- const {projects, fields, query} = payload;
- return {
- projects,
- fields,
- query,
- };
- }
- export function displayModeToDisplayType(displayMode: DisplayModes): DisplayType {
- switch (displayMode) {
- case DisplayModes.BAR:
- return DisplayType.BAR;
- case DisplayModes.WORLDMAP:
- return DisplayType.WORLD_MAP;
- case DisplayModes.TOP5:
- return DisplayType.TOP_N;
- default:
- return DisplayType.LINE;
- }
- }
|