CLI

Скрипты и CI/CD

Status200 CLI рассчитан на автоматизацию: аутентификация через переменные окружения, JSON для парсинга и осмысленные exit code для пайплайнов.

Переменные окружения

Без сохранённых контекстов:

export S200_API_KEY=sk-your-api-key
export S200_URL=https://status200.ru

Имеют приоритет над сохранёнными контекстами, но уступают флагам CLI.

Коды выхода

КодЗначение
0Успех
1Общая ошибка
2Ошибка аутентификации (нет или неверные учётные данные)
3Не найдено (404)

Пример в скрипте:

if ! status200 monitor list > /dev/null 2>&1; then
  echo "Не удалось получить список мониторов"
  exit 1
fi

Обработка JSON через jq

# Заголовки инцидентов
status200 incident list -o json | jq '.[].title'

# ID созданного монитора
NEW_ID=$(status200 monitor create --data '{"name":"API Health"}' -o json | jq -r '._id')
echo "Создан монитор: $NEW_ID"

# Количество по severity
status200 incident count --query '{"incidentSeverityId":"<severity-id>"}'

Создание из файлов

--file удобен для версионируемой инфраструктуры:

# monitor.json
# {
#   "name": "API Health Check",
#   "projectId": "your-project-id"
# }

status200 monitor create --file monitor.json

Пакетные операции

# Несколько мониторов из JSON-массива
cat monitors.json | jq -r '.[] | @json' | while read monitor; do
  status200 monitor create --data "$monitor"
done

Примеры CI/CD

GitHub Actions

name: Check Active Incidents
on:
  schedule:
    - cron: '*/5 * * * *'

jobs:
  health-check:
    runs-on: ubuntu-latest
    steps:
      - name: Install Status200 CLI
        run: npm install -g @status200/cli

      - name: Check for active incidents
        env:
          S200_API_KEY: ${{ secrets.S200_API_KEY }}
          S200_URL: https://status200.ru
        run: |
          INCIDENT_COUNT=$(status200 incident count)
          if [ "$INCIDENT_COUNT" -gt 0 ]; then
            echo "WARNING: $INCIDENT_COUNT incidents found"
            exit 1
          fi

Универсальный скрипт CI/CD

#!/bin/bash
set -e

export S200_API_KEY="$CI_S200_API_KEY"
export S200_URL="$CI_S200_URL"

# Инцидент о деплое и захват ID
# currentIncidentStateId и incidentSeverityId должны ссылаться на существующие ID в проекте
INCIDENT_ID=$(status200 incident create --data '{
  "title": "Deployment Started",
  "currentIncidentStateId": "'"$INVESTIGATING_STATE_ID"'",
  "incidentSeverityId": "'"$SEVERITY_ID"'",
  "declaredAt": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}' -o json | jq -r '._id')

# шаги деплоя...

# Закрытие инцидента после успешного деплоя
status200 incident update "$INCIDENT_ID" --data '{"currentIncidentStateId":"'"$RESOLVED_STATE_ID"'"}'

Docker

FROM node:20-slim
RUN npm install -g @status200/cli
ENV S200_API_KEY=""
ENV S200_URL=""
ENTRYPOINT ["status200"]
docker run --rm \
  -e S200_API_KEY=sk-abc123 \
  -e S200_URL=https://status200.ru \
  status200-cli incident list

Контекст в скриптах

status200 --context production incident list
status200 --context staging monitor count