send-multiple-logs.ts•2.24 kB
import { createAction, Property } from '@activepieces/pieces-framework';
import { v2 } from '@datadog/datadog-api-client';
import { datadogAuth } from '../..';
import { getDatadogConfiguration } from '../common';
import { z } from 'zod';
export const sendMultipleLogs = createAction({
  name: 'sendMultipleLogs',
  displayName: 'Send Multiple logs',
  description: 'Send your logs to your Datadog platform over HTTP.',
  auth: datadogAuth,
  requireAuth: true,
  props: {
    body: Property.Json({
      displayName: 'Logs',
      required: true,
      description: `Logs to send to Datadog, must contain a \`logs\` key with an array of objects. Documentation: https://docs.datadoghq.com/api/latest/logs/#send-logs`,
      defaultValue: {logs: [
        {
          ddsource: "source",
          ddtags: "env:test,version:1.0",
          hostname: "hostname",
          message: "message",
          service: "service",
          additionalProperties: {
            status: "info",
          },
        },
      ]}
    }),
  },
  async run({ auth, propsValue }) {
    /**
     * Documentation: https://docs.datadoghq.com/api/latest/logs/?code-lang=typescript
     */
    const apiInstance = new v2.LogsApi(getDatadogConfiguration(auth));
    // Validate the request body
    z.object({
      logs: z.array(
        z.object({
          message: z.string({required_error: "Log message cannot be empty"}),
          ddsource: z.string().optional(),
          ddtags: z.string().optional(),
          hostname: z.string().optional(),
          service: z.string().optional(),
          additionalProperties: z.record(z.string(), z.unknown()).optional(),
        }).strict("Allowed properties are `message`, `ddsource`, `ddtags`, `hostname`, `service`, `additionalProperties`"),
        { invalid_type_error: "Logs must be an array of objects under `logs` key e.g `{'logs': [{'message': 'test'}]}`"}
      ).min(1, "At least one log entry is required")
    }).strict().parse(propsValue.body);
    const params: v2.LogsApiSubmitLogRequest = {
      body: propsValue.body['logs'] as v2.HTTPLogItem[],
    };
    await apiInstance.submitLog(params)
    return {
      success: true,
      message: 'Logs sent successfully',
    };
  },
});