# Tài liệu tham khảo API Monitor

Source: https://instatus.com/help/vi/api/monitors

- [Monitors](https://instatus.com/help/vi/api/monitors#get-monitors): Check the uptime of your websites, APIs, and services
- [Cron Monitors](https://instatus.com/help/vi/api/monitors#cron-monitors): Monitor your scheduled jobs via HTTP pings

## Các giá trị có thể dùng cho từng trường

**Vị trí monitor**

| Giá trị           | Mô tả              |
| ---------------- | ----------------- |
| `US_EAST_1`      | N. Virginia       |
| `CA_CENTRAL_1`   | Canada (Montreal) |
| `EU_CENTRAL_1`   | Frankfurt         |
| `AP_NORTHEAST_1` | Tokyo             |

**Loại cảnh báo monitor**

| Giá trị            | Mô tả                  |
| ----------------- | --------------------- |
| `INCIDENT`        | Cảnh báo sự cố         |
| `EMAIL`           | Cảnh báo qua email     |
| `SMS`             | Cảnh báo qua SMS       |
| `SLACK`           | Cảnh báo qua Slack     |
| `DISCORD`         | Cảnh báo qua Discord   |
| `MICROSOFT_TEAMS` | Cảnh báo qua Microsoft Teams |
| `PHONE_CALL`      | Cảnh báo qua cuộc gọi điện thoại |
| `WEBHOOK`         | Cảnh báo qua webhook   |
| `GOOGLE_CHAT`     | Cảnh báo qua Google Chat |
| `WHATSAPP`        | Cảnh báo qua WhatsApp  |

**Trạng thái monitor**

| Giá trị     | Mô tả                              |
| ---------- | --------------------------------- |
| `UP`       | Monitor đang chạy bình thường      |
| `DOWN`     | Monitor đã gặp sự cố               |
| `DEGRADED` | Monitor đang gặp vấn đề            |
| `UNKNOWN`  | Không xác định được trạng thái monitor |

## Lấy danh sách monitor

Bạn có thể dùng endpoint này để tìm và duyệt qua danh sách tất cả monitor hiện có.

**Endpoint:**

```bash
GET /:page_id/monitors
```

**Tham số query**

| Tham số    | Kiểu      | Giá trị mặc định | Mô tả                                                   |
| --------- | -------- | ------------- | ------------------------------------------------------ |
| `page`    | `number` | `1`           | Số trang cần lấy.                                       |
| `limit`   | `number` | `100`         | Số monitor mỗi trang.                                   |
| `search`  | `string` | `null`        | Từ khóa tìm kiếm để lọc kết quả.                        |
| `status`  | `enum`   | `null`        | Bộ lọc trạng thái _('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')_. |

**Yêu cầu ví dụ**

```bash
GET /1/monitors?limit=3&page=2&status=DOWN
```

**Phản hồi ví dụ**

```json
{
  "monitors": [{ "...": "monitor objects" }],
  "total": 10,
  "page": 3,
  "totalPages": 5,
  "limit": 2
}
```

## Tạo một monitor

**Endpoint:**

```bash
POST /monitors
```

**Yêu cầu ví dụ**

```json
{
  "pageId": "page123",
  "url": "https://example.com",
  "httpMethod": "GET",
  "body": null,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer token"
  },
  "queryParams": {
    "search": "test",
    "limit": "10"
  },
  "basicAuth": {
    "username": "user",
    "password": "password"
  },
  "type": "HTTP",
  "assertions": [
    {
      "type": "STATUSCODE",
      "comparison": "EQUALS",
      "selector": null,
      "target": "200"
    }
  ],
  "alerts": ["alert-id-1", "alert-id-2"],
  "name": "Example Monitor",
  "locations": "US_EAST_1",
  "checksInterval": 300,
  "createComponent": true,
  "createMetric": true,
  "onFail": {
    "createIncident": true,
    "createOutageDuration": true,
    "publishIncident": true,
    "notifySubscribers": true
  },
  "onRecover": {
    "resolveIncident": true,
    "resolveOutageDuration": true,
    "publishIncident": true,
    "notifySubscribers": true
  }
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "pageId": "page123",
    "url": "https://example.com",
    "httpMethod": "GET",
    "body": null,
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer token"
    },
    "queryParams": {
      "search": "test",
      "limit": "10"
    },
    "basicAuth": {
      "username": "user",
      "password": "password"
    },
    "type": "HTTP",
    "assertions": [
      {
        "id": "assertion1",
        "type": "STATUSCODE",
        "comparison": "EQUALS",
        "selector": null,
        "target": "200"
      }
    ],
    "alerts": ["alert1", "alert2"],
    "name": "Example Monitor",
    "locations": "US_EAST_1",
    "checksInterval": 300,
    "createComponent": true,
    "createMetric": true,
    "onFail": {
      "createIncident": true,
      "createOutageDuration": true,
      "publishIncident": true,
      "notifySubscribers": true
    },
    "onRecover": {
      "resolveIncident": true,
      "resolveOutageDuration": true,
      "publishIncident": true,
      "notifySubscribers": true
    },
    "createdAt": "2023-08-08T12:00:00Z",
    "updatedAt": "2023-08-08T12:00:00Z"
  },
  "message": "Monitor created successfully"
}
```

## Cập nhật một monitor

**Endpoint:**

```bash
PUT /monitors/:id
```

**Yêu cầu ví dụ**

```json
{
  "url": "https://updated.com",
  "name": "Updated Monitor Name"
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "pageId": "page123",
    "url": "https://updated.com",
    "httpMethod": "GET",
    "body": null,
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer token"
    },
    "queryParams": {
      "search": "test",
      "limit": "10"
    },
    "basicAuth": {
      "username": "user",
      "password": "password"
    },
    "type": "HTTP",
    "assertions": [
      {
        "id": "assertion1",
        "type": "STATUSCODE",
        "comparison": "EQUALS",
        "selector": null,
        "value": "200"
      }
    ],
    "alerts": ["alert1", "alert2"],
    "name": "Updated Monitor Name",
    "locations": "US_EAST_1",
    "checksInterval": 300,
    "createComponent": true,
    "createMetric": true,
    "onFail": {
      "createIncident": true,
      "createOutageDuration": true,
      "publishIncident": true,
      "notifySubscribers": true
    },
    "onRecover": {
      "resolveIncident": true,
      "resolveOutageDuration": true,
      "publishIncident": true,
      "notifySubscribers": true
    },
    "createdAt": "2023-08-08T12:00:00Z",
    "updatedAt": "2023-08-08T12:00:00Z"
  },
  "message": "Monitor updated successfully"
}
```

## Xóa một monitor

**Endpoint:**

```bash
DELETE /monitors/:id
```

**Yêu cầu ví dụ**

```bash
DELETE /monitors/monitor-id-1
```

**Phản hồi ví dụ**

```json
{
  "message": "Monitor deleted successfully."
}
```

## Lấy log của monitor

**Endpoint:**

```bash
GET /monitors/:id/logs
```

# Tham số query

| Tham số                 | Kiểu                                     | Giá trị mặc định | Mô tả                                                                                    |
| ---------------------- | --------------------------------------- | --------------- | --------------------------------------------------------------------------------------- |
| `limit`                | `number`                                | 100             | Số mục mỗi trang. Không được vượt quá 1000.                                              |
| `page`                 | `number`                                | 1               | Số trang cần lấy.                                                                        |
| `monitorId`            | `string`                                | -               | ID của monitor.                                                                          |
| `location`             | `string`                                | `null`          | Vị trí của monitor.                                                                      |
| `createdAt`            | `string` \| `object` \| `number`        | `null`          | Ngày tạo. Có thể là chuỗi, số, hoặc một object có các trường `gte` và `lte`.            |
| `isSuccessful`         | `boolean`                               | `null`          | Lần kiểm tra có thành công hay không.                                                    |
| `isSSLCheck`           | `boolean`                               | `null`          | Lần kiểm tra có phải là kiểm tra SSL hay không.                                           |
| `httpStatusCode`       | `string`                                | `null`          | Mã trạng thái HTTP của phản hồi.                                                         |
| `status`               | `('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')` | `null`          | Trạng thái của monitor.                                                                  |
| `dnsTime`              | `string` \| `number` \| `object`        | `null`          | Thời gian phân giải DNS.                                                                 |
| `tcpTime`              | `string` \| `number` \| `object`        | `null`          | Thời gian kết nối TCP.                                                                   |
| `tlsTime`              | `string` \| `number` \| `object`        | `null`          | Thời gian bắt tay TLS.                                                                   |
| `firstByteTime`        | `string` \| `number` \| `object`        | `null`          | Thời gian nhận được byte đầu tiên.                                                       |
| `downloadTime`         | `string` \| `number` \| `object`        | `null`          | Thời gian tải xuống.                                                                     |
| `responseTime`         | `string` \| `number` \| `object`        | `null`          | Tổng thời gian phản hồi.                                                                 |
| `performanceTime`      | `string` \| `number` \| `object`        | `null`          | Thời gian hiệu suất.                                                                     |
| `accessabilityScore`   | `string` \| `number` \| `object`        | `null`          | Điểm khả năng tiếp cận.                                                                  |
| `seoScore`             | `string` \| `number` \| `object`        | `null`          | Điểm SEO.                                                                                |
| `bestPracticesScore`   | `string` \| `number` \| `object`        | `null`          | Điểm thực hành tốt nhất.                                                                 |
| `successfulAssertions` | `string` \| `number` \| `object`        | `null`          | Số điều kiện được thỏa mãn.                                                              |
| `sort`                 | `string`                                | theo thời gian  | Trường dùng để sắp xếp.                                                                  |

**Yêu cầu ví dụ**

```bash
GET /monitors/monitor-id-1/logs?limit=100&page=1
```

**Phản hồi ví dụ**

```json
{
  "monitorLogs": [
    // {monitor log object},
    // {monitor log object 2}
  ],
  "total": 478,
  "page": 1,
  "totalPages": 5,
  "limit": 100
}
```

## Chạy kiểm tra monitor theo ID

**Endpoint:**

```bash
GET /monitors/:id/run
```

**Tham số query**

| Tham số         | Kiểu                                                                               | Giá trị mặc định | Mô tả                                                              |
| -------------- | --------------------------------------------------------------------------------- | ------------- | ----------------------------------------------------------------- |
| `location`     | `'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'` | -             | Vị trí của monitor. Phải là một trong các giá trị được liệt kê.    |
| `retry`        | `boolean`                                                                         | `false`       | Cho biết thao tác có nên được thử lại hay không. Tùy chọn.         |
| `monitorLogId` | `string`                                                                          | `null`        | Định danh duy nhất của log monitor. Tùy chọn.                      |

**Yêu cầu ví dụ**

```bash
GET /monitors/monitor-id-1/run?monitorId=abc123&location=US_EAST_1&retry=true&monitorLogId=log456
```

**Phản hồi ví dụ**

```json
{
  "status": "success",
  "message": "Monitor check run successfully."
}
```

## Tạo cảnh báo monitor

**Endpoint:**

```bash
POST /monitor-alerts
```

**Yêu cầu ví dụ**

```json
{
  "type": "EMAIL",
  "pageId": "page123",
  "recipient": "user@example.com",
  "recipientWorkspace": "workspace123",
  "whenFails": true,
  "whenRecovers": true,
  "whenDegrades": false,
  "whenSslExpires": true,
  "sslExpiresInDays": 30,
  "monitors": ["monitor1", "monitor2"],
  "metadata": "Additional information about the alert"
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "id": "alert123",
    "siteId": "site123",
    "type": "EMAIL",
    "recipient": "user@example.com",
    "whenFails": true,
    "whenRecovers": true,
    "whenDegrades": false,
    "whenSslExpires": true,
    "sslExpiresInDays": 30,
    "monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
    "createdAt": "2023-08-08T12:00:00Z",
    "updatedAt": "2023-08-08T12:00:00Z",
    "metadata": "Additional information about the alert"
  },
  "message": "Monitor Alert created successfully"
}
```

## Cập nhật cảnh báo monitor

**Endpoint:**

```bash
PUT /monitor-alerts/:id
```

**Yêu cầu ví dụ**

```json
{
  "type": "EMAIL",
  "monitors": ["monitor-1-id", "monitor-2-id", "monitor-3-id"]
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "type": "EMAIL",
    "pageId": "page123",
    "recipient": "user@example.com",
    "recipientWorkspace": "workspace123",
    "whenFails": true,
    "whenRecovers": true,
    "whenDegrades": false,
    "whenSslExpires": true,
    "sslExpiresInDays": 30,
    "monitors": ["monitor-1-id", "monitor-2-id"],
    "metadata": "Additional information about the alert"
  },
  "message": "Monitor alert updated successfully."
}
```

## Lấy danh sách cảnh báo monitor

**Endpoint:**

```bash
GET /:page_id/monitor-alerts
```

**Tham số query**

| Tham số    | Kiểu      | Giá trị mặc định | Mô tả                          |
| --------- | -------- | ------------- | ----------------------------- |
| `limit`   | `number` | 100           | Số mục mỗi trang.              |
| `page`    | `number` | 1             | Số trang cần lấy.              |

**Yêu cầu ví dụ**

```bash
GET /1/monitor-alerts?limit=2&page=3
```

**Phản hồi ví dụ**

```json
{
  "monitorAlerts": [
    {...monitor alert objects}
  ],
  "total": 27,
  "page": 3,
  "totalPages": 14,
  "limit": 2
}
```

## Xóa cảnh báo monitor

**Endpoint:**

```bash
DELETE /monitor-alerts/:id
```

**Yêu cầu ví dụ**

```bash
DELETE /monitor-alerts/alert-id-1
```

**Phản hồi ví dụ**

```json
{
  "message": "Monitor alert deleted successfully."
}
```

## Tạo nhóm monitor

**Endpoint:**

```bash
POST /monitors-groups
```

**Yêu cầu ví dụ**

```json
{
  "pageId": "page123",
  "name": "Example Name",
  "childId": "child456"
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "id": "group123",
    "name": "Example Name",
    "siteId": "site123",
    "collapsed": false,
    "monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
    "groupId": "parentGroup123",
    "children": [
      { "id": "childGroup1", "name": "Child Group 1" },
      { "id": "childGroup2", "name": "Child Group 2" }
    ],
    "order": 1,
    "createdAt": "2023-08-08T12:00:00Z",
    "updatedAt": "2023-08-08T12:00:00Z",
    "parents": ["parent1", "parent2"],
    "componentId": "component123"
  },
  "message": "Monitor group created successfully."
}
```

## Cập nhật nhóm monitor

**Endpoint:**

```bash
PUT /monitors-groups/:id
```

**Yêu cầu ví dụ**

```json
{
  "name": "Updated Monitor Group Name"
}
```

**Phản hồi ví dụ**

```json
{
  "monitor": {
    "id": "group123",
    "name": "Updated Monitor Group Name",
    "siteId": "site123",
    "collapsed": true,
    "monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
    "groupId": "parentGroup123",
    "children": [
      { "id": "childGroup1", "name": "Child Group 1" },
      { "id": "childGroup2", "name": "Child Group 2" }
    ],
    "order": 1,
    "createdAt": "2023-08-08T12:00:00Z",
    "updatedAt": "2023-08-08T12:00:00Z",
    "parents": ["parent1", "parent2"],
    "componentId": "component123"
  },
  "message": "Monitor group updated successfully."
}
```

## Xóa nhóm monitor

**Endpoint:**

```bash
DELETE /monitors-groups/:id
```

**Yêu cầu ví dụ**

```bash
DELETE /monitors-groups/group-id-1
```

**Phản hồi ví dụ**

```json
{
  "message": "Monitor group deleted successfully."
}
```

## Thêm monitor vào nhóm

**Endpoint:**

```bash
POST /monitors-groups/:id/monitors
```

**Yêu cầu ví dụ**

```json
{
  "monitors": ["monitor1", "monitor2", "monitor3"]
}
```

**Phản hồi ví dụ**

```json
{
  "message": "Monitors added to the group successfully."
}
```

## Chạy kiểm tra nhóm monitor

**Endpoint:**

```bash
GET /monitors-groups/:id/run
```

**Tham số query**

| Tham số         | Kiểu                                                                               | Giá trị mặc định | Mô tả                                                              |
| -------------- | --------------------------------------------------------------------------------- | ------------- | ----------------------------------------------------------------- |
| `location`     | `'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'` | -             | Vị trí của monitor. Phải là một trong các giá trị được liệt kê.    |
| `retry`        | `boolean`                                                                         | `false`       | Cho biết thao tác có nên được thử lại hay không. Tùy chọn.         |
| `monitorLogId` | `string`                                                                          | `null`        | Định danh duy nhất của log monitor. Tùy chọn.                      |

**Yêu cầu ví dụ**

```bash
GET /monitors-groups/group-id-1/run
```

**Phản hồi ví dụ**

```json
{
  "result": "OK",
  "monitorLogId": "monitor-log-id-1"
}
```

## Monitor cron

Monitor cron theo dõi các job theo lịch thông qua ping HTTP. Về cách thiết lập và sử dụng trong dashboard, xem [Giám sát cron](https://instatus.com/help/vi/monitoring/cron).

### Các giá trị có thể dùng cho từng trường

**Trạng thái monitor cron**

| Giá trị     | Mô tả                              |
| ---------- | --------------------------------- |
| `UP`       | Monitor đang chạy bình thường      |
| `DOWN`     | Monitor đã gặp sự cố               |
| `DEGRADED` | Monitor đang gặp vấn đề            |
| `UNKNOWN`  | Không xác định được trạng thái monitor |

**Tình trạng monitor cron**

| Giá trị   | Mô tả                                 |
| -------- | ------------------------------------ |
| `ACTIVE` | Monitor đang được kiểm tra            |
| `PAUSED` | Các lần kiểm tra monitor đang tạm dừng |
| `MUTED`  | Monitor đã được tắt tiếng (không thông báo) |

**Trạng thái log của monitor cron**

| Giá trị    | Mô tả                                             |
| --------- | ------------------------------------------------ |
| `SUCCESS` | Job hoàn tất thành công                           |
| `FAILURE` | Job báo lỗi rõ ràng                               |
| `MISSED`  | Job không ping trong khoảng thời gian mong đợi    |
| `LATE`    | Job ping sau chu kỳ nhưng vẫn trong thời gian ân hạn |
| `STARTED` | Job báo rằng nó đã bắt đầu (đo thời gian chạy)    |

**Chu kỳ và thời gian ân hạn**

Cả `period` và `grace` đều tính bằng **giây**. `period` là tần suất job cần chạy; `grace` là khoảng thời gian dôi ra trước khi monitor bị đánh dấu là gặp sự cố.

### Lấy danh sách monitor cron

**Endpoint:**

```bash
GET /:page_id/monitors/cron
```

**Tham số query**

| Tham số    | Kiểu      | Giá trị mặc định | Mô tả                                                   |
| --------- | -------- | ------------- | ------------------------------------------------------ |
| `limit`   | `number` | `100`         | Số monitor cron mỗi trang. Tối đa là 100.               |
| `page`    | `number` | `1`           | Số trang.                                               |
| `search`  | `string` | `null`        | Từ khóa tìm kiếm để lọc kết quả theo tên.               |
| `status`  | `enum`   | `null`        | Bộ lọc trạng thái _('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')_. |

**Yêu cầu ví dụ**

```bash
GET /page123/monitors/cron?limit=10&page=1&status=DOWN
```

**Phản hồi ví dụ**

```json
{
  "cronMonitors": [
    {
      "id": "cron-abc123",
      "name": "Daily backup",
      "slug": "my-page-x7k2m9n4p1q8w3e5",
      "period": 86400,
      "grace": 3600,
      "status": "UP",
      "state": "ACTIVE",
      "siteId": "page123",
      "order": 1,
      "groupId": null,
      "componentId": "component-id-1",
      "onFailCreateIncident": true,
      "onFailCreateOutageDuration": false,
      "onFailPublishIncident": true,
      "onFailNotifySubscribers": true,
      "onRecoverResolveIncident": true,
      "onRecoverResolveOutageDuration": false,
      "onRecoverPublishIncident": true,
      "onRecoverNotifySubscribers": true,
      "createTemplateId": null,
      "resolveTemplateId": null,
      "createdAt": "2024-01-15T08:00:00.000Z",
      "updatedAt": "2024-01-15T08:00:00.000Z"
    }
  ],
  "total": 1,
  "page": 1,
  "totalPages": 1,
  "limit": 10
}
```

### Tạo một monitor cron

**Endpoint:**

```bash
POST /monitors/cron
```

**Yêu cầu ví dụ**

```json
{
  "pageId": "page123",
  "name": "Daily backup",
  "period": 86400,
  "grace": 3600,
  "alerts": ["alert-id-1", "alert-id-2"],
  "createComponent": true,
  "onFail": {
    "createIncident": true,
    "createOutageDuration": false,
    "publishIncident": true,
    "notifySubscribers": true
  },
  "onRecover": {
    "resolveIncident": true,
    "resolveOutageDuration": false,
    "publishIncident": true,
    "notifySubscribers": true
  }
}
```

**Phản hồi ví dụ**

```json
{
  "cronMonitor": {
    "id": "cron-abc123",
    "name": "Daily backup",
    "slug": "my-page-x7k2m9n4p1q8w3e5",
    "period": 86400,
    "grace": 3600,
    "status": "UP",
    "state": "ACTIVE",
    "siteId": "page123",
    "order": 1,
    "groupId": null,
    "componentId": "component-id-1",
    "onFailCreateIncident": true,
    "onFailCreateOutageDuration": false,
    "onFailPublishIncident": true,
    "onFailNotifySubscribers": true,
    "onRecoverResolveIncident": true,
    "onRecoverResolveOutageDuration": false,
    "onRecoverPublishIncident": true,
    "onRecoverNotifySubscribers": true,
    "createTemplateId": null,
    "resolveTemplateId": null,
    "createdAt": "2024-01-15T08:00:00.000Z",
    "updatedAt": "2024-01-15T08:00:00.000Z"
  },
  "message": "Cron monitor created successfully."
}
```

Phản hồi có kèm một `slug`. Dùng nó để tạo các URL ping cho job của bạn. Lần ping thành công đầu tiên sẽ lên lịch cho job kiểm tra chạy nền.

### Cập nhật một monitor cron

**Endpoint:**

```bash
PUT /monitors/cron/:id
```

**Yêu cầu ví dụ**

```json
{
  "name": "Daily backup (updated)",
  "period": 43200,
  "grace": 1800,
  "state": "PAUSED",
  "alerts": ["alert-id-1"],
  "onFail": {
    "notifySubscribers": false
  }
}
```

**Phản hồi ví dụ**

```json
{
  "cronMonitor": {
    "id": "cron-abc123",
    "name": "Daily backup (updated)",
    "slug": "my-page-x7k2m9n4p1q8w3e5",
    "period": 43200,
    "grace": 1800,
    "status": "UP",
    "state": "PAUSED",
    "siteId": "page123",
    "order": 1,
    "groupId": null,
    "componentId": "component-id-1",
    "onFailCreateIncident": true,
    "onFailCreateOutageDuration": false,
    "onFailPublishIncident": true,
    "onFailNotifySubscribers": false,
    "onRecoverResolveIncident": true,
    "onRecoverResolveOutageDuration": false,
    "onRecoverPublishIncident": true,
    "onRecoverNotifySubscribers": true,
    "createTemplateId": null,
    "resolveTemplateId": null,
    "alerts": [
      {
        "id": "alert-id-1",
        "type": "EMAIL",
        "recipient": "ops@example.com"
      }
    ],
    "createdAt": "2024-01-15T08:00:00.000Z",
    "updatedAt": "2024-01-16T10:30:00.000Z"
  },
  "message": "Cron monitor updated successfully."
}
```

### Xóa một monitor cron

**Endpoint:**

```bash
DELETE /monitors/cron/:id
```

**Yêu cầu ví dụ**

```bash
DELETE /monitors/cron/cron-abc123
```

**Phản hồi ví dụ**

```json
{
  "cronMonitor": {
    "id": "cron-abc123",
    "name": "Daily backup",
    "slug": "my-page-x7k2m9n4p1q8w3e5",
    "period": 86400,
    "grace": 3600,
    "status": "UP",
    "state": "ACTIVE",
    "siteId": "page123",
    "order": 1,
    "groupId": null,
    "componentId": "component-id-1",
    "onFailCreateIncident": true,
    "onFailCreateOutageDuration": false,
    "onFailPublishIncident": true,
    "onFailNotifySubscribers": true,
    "onRecoverResolveIncident": true,
    "onRecoverResolveOutageDuration": false,
    "onRecoverPublishIncident": true,
    "onRecoverNotifySubscribers": true,
    "createTemplateId": null,
    "resolveTemplateId": null,
    "createdAt": "2024-01-15T08:00:00.000Z",
    "updatedAt": "2024-01-15T08:00:00.000Z"
  },
  "message": "Cron monitor deleted successfully."
}
```

### Lấy log của monitor cron

**Endpoint:**

```bash
GET /monitors/cron/:id/logs
```

**Tham số query**

| Tham số       | Kiểu      | Giá trị mặc định | Mô tả                                                     |
| ------------ | -------- | ------------- | -------------------------------------------------------- |
| `limit`      | `number` | `100`         | Số log mỗi trang. Tối đa là 127.                          |
| `page`       | `number` | `1`           | Số trang. Tối đa là 1000.                                 |
| `startDate`  | `string` | 1 năm trước   | Ngày bắt đầu theo ISO 8601 cho khoảng log.                |
| `endDate`    | `string` | bây giờ       | Ngày kết thúc theo ISO 8601 cho khoảng log.               |
| `importance` | `enum`   | `null`        | Lọc log theo mức quan trọng _('all', 'important')_.       |

**Yêu cầu ví dụ**

```bash
GET /monitors/cron/cron-abc123/logs?limit=50&page=1&importance=important
```

**Phản hồi ví dụ**

```json
{
  "logs": [
    {
      "id": "log-xyz789",
      "monitorId": "cron-abc123",
      "status": "SUCCESS",
      "requestType": "GET",
      "agent": "curl/8.4.0",
      "ipAddress": "203.0.113.10",
      "createdAt": "2024-01-16T06:00:00.000Z",
      "startedAt": "2024-01-16T05:59:58.000Z"
    }
  ],
  "page": 1
}
```

### Lấy tóm tắt monitor cron

**Endpoint:**

```bash
GET /monitors/cron/:id/summary
```

**Yêu cầu ví dụ**

```bash
GET /monitors/cron/cron-abc123/summary
```

**Phản hồi ví dụ**

```json
{
  "summary": {
    "totalLogs": 120,
    "totalFailedLogs": 3,
    "availability": 97.5,
    "oneDayAvailability": 100,
    "previousDayAvailability": 100,
    "sevenDayAvailability": 98.2,
    "previousSevenDayAvailability": 96.1,
    "thirtyDayAvailability": 97.5,
    "previousThirtyDayAvailability": 95.8,
    "lastSuccess": "2024-01-16T06:00:00.000Z",
    "lastFailure": "2024-01-10T06:00:00.000Z",
    "lastStarted": null,
    "upSince": "2024-01-10T07:00:00.000Z",
    "downSince": null
  }
}
```

### Các endpoint ping

Các endpoint này **không** yêu cầu xác thực. `slug` của monitor đóng vai trò như một secret.

Bạn có thể ping qua URL gốc của API hoặc qua host cron riêng:

- **Thành công:** `https://cron.instatus.com/{slug}` hoặc `GET` / `POST` / `HEAD` `/monitors/cron/{slug}`
- **Thất bại:** `https://cron.instatus.com/{slug}/fail` hoặc `GET` / `POST` / `HEAD` `/monitors/cron/{slug}/fail`
- **Bắt đầu:** `https://cron.instatus.com/{slug}/start` hoặc `GET` / `POST` / `HEAD` `/monitors/cron/{slug}/start`

Hãy gửi ping thành công mỗi khi job của bạn hoàn tất đúng lịch. Gửi ping bắt đầu trước khi job chạy và ping thành công hoặc thất bại khi job kết thúc để ghi lại thời gian thực thi.

**Ví dụ ping thành công**

```bash
curl https://cron.instatus.com/my-page-x7k2m9n4p1q8w3e5
```

**Phản hồi ví dụ**

```json
{
  "id": "log-xyz789",
  "monitorId": "cron-abc123",
  "status": "SUCCESS",
  "requestType": "GET",
  "agent": "curl/8.4.0",
  "ipAddress": "203.0.113.10",
  "createdAt": "2024-01-16T06:00:00.000Z"
}
```

Nếu slug không hợp lệ, phản hồi sẽ là:

```json
{
  "message": "Monitor not found"
}
```
