import ExternalLink from 'sentry/components/links/externalLink';
import Link from 'sentry/components/links/link';
import {tct} from 'sentry/locale';
import {type ProcessingError, ProcessingErrorType} from 'sentry/views/monitors/types';
interface Props {
checkinTooltip: React.ReactNode;
error: ProcessingError;
}
export function ProcessingErrorItem({error, checkinTooltip}: Props) {
switch (error.type) {
case ProcessingErrorType.CHECKIN_ENVIRONMENT_MISMATCH:
return tct(
'The environment of the second [checkinTooltip:check-in] does not match the original "[env]" environment. Ensure both check-ins have the same environment.',
{checkinTooltip, env: error.existingEnvironment}
);
case ProcessingErrorType.CHECKIN_FINISHED:
return tct(
'A [checkinTooltip:check-in] update was sent to a check-in that has already succeeded or failed. Only in-progress check-ins can be updated.',
{checkinTooltip}
);
case ProcessingErrorType.CHECKIN_GUID_PROJECT_MISMATCH:
return tct(
'The [checkinTooltip:check-in] GUID provided matched to an existing check-in for a project that is different than the associated project DSN. Use the correct DSN to successfully update your check-in.',
{checkinTooltip}
);
case ProcessingErrorType.CHECKIN_INVALID_DURATION:
return tct(
'A [checkinTooltip:check-in] was sent with an invalid duration of "[duration]".',
{
checkinTooltip,
duration: error.duration,
}
);
case ProcessingErrorType.CHECKIN_INVALID_GUID:
return tct('A [checkinTooltip:check-in] was sent with an invalid GUID.', {
checkinTooltip,
});
case ProcessingErrorType.CHECKIN_VALIDATION_FAILED:
return tct(
'A [checkinTooltip:check-in] was sent with an invalid payload. Learn more about the check-in payload in our [link:documentation]',
{
checkinTooltip,
link: (
),
}
);
case ProcessingErrorType.MONITOR_DISABLED:
return tct(
'A [checkinTooltip:check-in] was sent but was discarded because the monitor is disabled.',
{checkinTooltip}
);
case ProcessingErrorType.MONITOR_DISABLED_NO_QUOTA:
return tct(
'A [checkinTooltip:check-in] upsert was sent, but due to insufficient quota a new monitor could not be enabled. Increase your Crons on-demand budget in your [link: subscription settings], and then enable this monitor.',
{checkinTooltip, link: }
);
case ProcessingErrorType.MONITOR_INVALID_CONFIG:
return tct(
'A monitor failed to upsert due to an invalid [checkinTooltip:check-in] payload provided. Learn more about the check-in payload in our [link:documentation].',
{
checkinTooltip,
link: (
),
}
);
case ProcessingErrorType.MONITOR_INVALID_ENVIRONMENT:
return tct(
'A [checkinTooltip:check-in] was sent with an invalid environment due to: [reason].',
{
checkinTooltip,
reason: error.reason,
}
);
case ProcessingErrorType.MONITOR_LIMIT_EXCEEDED:
return tct(
'The maximum monitor limit for this project has been reached. Please reach out to our [link:sales team] to create additional monitors.',
{link: }
);
case ProcessingErrorType.MONITOR_NOT_FOUND:
return tct(
'A [checkinTooltip:check-in] was sent for a monitor that does not exist. If you meant to create a new monitor via upsert, please provide a valid monitor configuration in the check-in payload.',
{checkinTooltip}
);
case ProcessingErrorType.MONITOR_OVER_QUOTA:
return tct(
'A [checkinTooltip:check-in] was sent but dropped due to the monitor being disabled. Please increase your on-demand budget if needed in your [link:subscription settings]. Then, enable this monitor to resume processing check-ins.',
{
checkinTooltip,
link: ,
}
);
case ProcessingErrorType.MONITOR_ENVIRONMENT_LIMIT_EXCEEDED:
return tct(
'A [checkinTooltip:check-in] was sent but dropped because the monitor has already reached the limit of allowed environments. Remove an existing environment to create new ones.',
{checkinTooltip}
);
case ProcessingErrorType.MONITOR_ENVIRONMENT_RATELIMITED:
return tct(
'A sent [checkinTooltip:check-in] was dropped due to being rate limited. Reivew our rate limits for more information.',
{checkinTooltip}
);
case ProcessingErrorType.ORGANIZATION_KILLSWITCH_ENABLED:
return tct(
'We have detected a problem with your organization and disabled check-in ingestion. Contact [link:support] for details.',
{link: }
);
default:
return tct(
'Unknown problem occurred while processing this [checkinTooltip:check-in]',
{checkinTooltip}
);
}
}