63 lines
3.0 KiB
TypeScript
63 lines
3.0 KiB
TypeScript
import type {ServiceSchema} from './types'
|
|
|
|
export function awsLogsSchema(): ServiceSchema {
|
|
return {
|
|
cloud: 'aws',
|
|
service: 'logs',
|
|
displayName: 'CloudWatch Logs',
|
|
fields: [
|
|
{
|
|
name: 'name',
|
|
label: 'Log group name',
|
|
type: 'text',
|
|
required: true,
|
|
validation: {
|
|
minLength: 1,
|
|
maxLength: 512,
|
|
pattern: '^[A-Za-z0-9_./#-]+$',
|
|
message: 'Use letters, numbers, underscore, dot, slash, hash, or dash.',
|
|
},
|
|
},
|
|
],
|
|
actions: ['list', 'create', 'delete', 'inspect'],
|
|
capabilities: {
|
|
resourceActions: [
|
|
{name: 'list', label: 'List log groups', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'create', label: 'Create log group', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'delete', label: 'Delete log group', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'inspect', label: 'Inspect metadata', enabled: true, status: 'available', runtimeRequired: true},
|
|
],
|
|
collectionActions: [
|
|
{name: 'list', label: 'List log streams', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'create', label: 'Create log stream', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'delete', label: 'Delete log stream', enabled: true, status: 'available', runtimeRequired: true},
|
|
],
|
|
// Read-only leaf, and that is the provider's shape rather than a gap:
|
|
// AWS has no DeleteLogEvent, and writing events from a resource
|
|
// browser is not something a console should offer.
|
|
itemActions: [
|
|
{name: 'list', label: 'Read log events', enabled: true, status: 'available', runtimeRequired: true},
|
|
],
|
|
},
|
|
filters: [
|
|
{
|
|
name: 'search',
|
|
label: 'Name starts with',
|
|
type: 'text',
|
|
required: false,
|
|
description: 'CloudWatch filters log groups by prefix, not by substring.',
|
|
},
|
|
],
|
|
columns: [
|
|
{name: 'name', label: 'Log group'},
|
|
// No 'Stored' column here, deliberately: the runtime's DescribeLogGroups
|
|
// always reports storedBytes as 0 at the group level (only the stream
|
|
// level is accurate), so a table cell showing "0 B" would tell the user
|
|
// a populated group is empty. The field still travels in
|
|
// metadata.storedBytes for anyone reading the resource directly.
|
|
{name: 'retentionInDays', label: 'Retention', path: 'metadata.retentionInDays', emptyText: 'Never expires'},
|
|
{name: 'createdAt', label: 'Created', format: 'datetime'},
|
|
],
|
|
}
|
|
}
|