Skip to main content
Glama

@arizeai/phoenix-mcp

Official
by Arize-ai
EditRetentionPolicy.tsx3.85 kB
import { graphql, useLazyLoadQuery, useMutation } from "react-relay"; import { useNotifyError, useNotifySuccess, } from "@phoenix/contexts/NotificationContext"; import type { ProjectTraceRetentionRuleInput } from "./__generated__/CreateRetentionPolicyMutation.graphql"; import type { EditRetentionPolicyMutation } from "./__generated__/EditRetentionPolicyMutation.graphql"; import { EditRetentionPolicyQuery } from "./__generated__/EditRetentionPolicyQuery.graphql"; import { RetentionPolicyForm, RetentionPolicyFormParams, } from "./RetentionPolicyForm"; interface EditRetentionPolicyProps { policyId: string; onEditCompleted: () => void; onCancel?: () => void; } /** * A Wrapper around the RetentionPolicyForm component that is used to edit an existing retention policy. */ export function EditRetentionPolicy(props: EditRetentionPolicyProps) { const notifySuccess = useNotifySuccess(); const notifyError = useNotifyError(); const data = useLazyLoadQuery<EditRetentionPolicyQuery>( graphql` query EditRetentionPolicyQuery($id: ID!) { retentionPolicy: node(id: $id) { ... on ProjectTraceRetentionPolicy { id name cronExpression rule { ... on TraceRetentionRuleMaxCount { maxCount } ... on TraceRetentionRuleMaxDays { maxDays } ... on TraceRetentionRuleMaxDaysOrCount { maxDays maxCount } } } } } `, { id: props.policyId, } ); if (!data?.retentionPolicy) { throw new Error("Retention policy not found"); } const [submit, isSubmitting] = useMutation<EditRetentionPolicyMutation>( graphql` mutation EditRetentionPolicyMutation( $input: PatchProjectTraceRetentionPolicyInput! ) { patchProjectTraceRetentionPolicy(input: $input) { query { ...RetentionPoliciesTable_policies } } } ` ); const onSubmit = (params: RetentionPolicyFormParams) => { let rule: ProjectTraceRetentionRuleInput; if (params.numberOfDays && params.numberOfTraces) { rule = { maxDaysOrCount: { maxDays: params.numberOfDays, maxCount: params.numberOfTraces, }, }; } else if (params.numberOfDays) { rule = { maxDays: { maxDays: params.numberOfDays, }, }; } else if (params.numberOfTraces) { rule = { maxCount: { maxCount: params.numberOfTraces, }, }; } else { throw new Error("Invalid retention policy rule"); } submit({ variables: { input: { id: props.policyId, cronExpression: params.schedule, rule, name: params.name, }, }, onCompleted: () => { notifySuccess({ title: "Retention policy updated successfully", message: "The retention policy has been updated successfully.", }); props.onEditCompleted(); }, onError: () => { notifyError({ title: "Error updating retention policy", message: "Please try again.", }); }, }); }; return ( <RetentionPolicyForm onSubmit={onSubmit} isSubmitting={isSubmitting} mode="edit" defaultValues={{ // Fallbacks should never happen, just to satisfy the type checker name: data.retentionPolicy.name ?? "New Policy", schedule: data.retentionPolicy.cronExpression ?? "0 0 * * 0", numberOfDays: data.retentionPolicy.rule?.maxDays, numberOfTraces: data.retentionPolicy.rule?.maxCount, }} onCancel={props.onCancel} /> ); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arize-ai/phoenix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server