mirror of
https://github.com/rajnandan1/kener.git
synced 2025-12-16 23:26:02 -06:00
805 lines
23 KiB
YAML
805 lines
23 KiB
YAML
---
|
|
info:
|
|
title: Kener API
|
|
version: 3.0.0
|
|
description: |
|
|
# Kener Selfhost node js status page
|
|

|
|
API specification for Kener status page and incident management system. This API spec was created using [Frogment](https://www.frogment.app)
|
|
contact:
|
|
name: Raj Nandan Sharma
|
|
email: rajnandan1@gmail.com
|
|
url: https://github.com/rajnandan1/kener/issues
|
|
license:
|
|
name: MIT
|
|
url: https://opensource.org/licenses/MIT
|
|
openapi: 3.0.0
|
|
servers:
|
|
- url: https://{host}
|
|
description: Kener host URL
|
|
tags:
|
|
- name: Monitors
|
|
description: APIs to interact with monitors
|
|
- name: Incidents
|
|
description: APIs to integrate incidents
|
|
components:
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
bearerFormat: JWT
|
|
description: enter your api key here
|
|
schemas:
|
|
MonitorStatus:
|
|
type: object
|
|
description: Monitor Status
|
|
required:
|
|
- status
|
|
- latency
|
|
- tag
|
|
properties:
|
|
status:
|
|
type: string
|
|
example: UP
|
|
enum:
|
|
- UP
|
|
- DOWN
|
|
- DEGRADED
|
|
latency:
|
|
type: number
|
|
description: In seconds
|
|
example: 100
|
|
timestampInSeconds:
|
|
type: integer
|
|
description: UTC timestamp in seconds
|
|
example: 1731251760
|
|
tag:
|
|
type: string
|
|
example: earth
|
|
description: Tag of a monitor
|
|
example:
|
|
status: UP
|
|
timestampInSeconds: 1731251760
|
|
latency: 100
|
|
tag: earth
|
|
StatusResponse:
|
|
type: object
|
|
description: Status of a monitor given a tag
|
|
properties:
|
|
status:
|
|
type: string
|
|
example: UP
|
|
enum:
|
|
- UP
|
|
- DOWN
|
|
- DEGRADED
|
|
uptime:
|
|
type: string
|
|
example: '100'
|
|
last_updated_at:
|
|
type: integer
|
|
example: 1731251760
|
|
example:
|
|
status: UP
|
|
last_updated_at: 1731251760
|
|
uptime: '100'
|
|
Incident:
|
|
type: object
|
|
description: body of an incident
|
|
properties:
|
|
start_date_time:
|
|
type: integer
|
|
description: UTC timestamp in seconds
|
|
example: 1731901920
|
|
end_date_time:
|
|
type: integer
|
|
description: UTC timestamp in seconds
|
|
nullable: true
|
|
example: 1704123938
|
|
title:
|
|
type: string
|
|
example: Outage in mumbai
|
|
description: title of the incident
|
|
created_at:
|
|
type: string
|
|
example: '2025-01-09 04:12:01'
|
|
description: created at time
|
|
updated_at:
|
|
type: string
|
|
example: '2025-01-09 06:10:00'
|
|
description: updated at time
|
|
status:
|
|
type: string
|
|
example: OPEN
|
|
description: delete or not deleted incident
|
|
enum:
|
|
- OPEN
|
|
- CLOSED
|
|
state:
|
|
type: string
|
|
description: the current status of the incident
|
|
example: INVESTIGATING
|
|
enum:
|
|
- INVESTIGATING
|
|
- IDENTIFIED
|
|
- MONITORING
|
|
- RESOLVED
|
|
example:
|
|
start_date_time: 1731901920
|
|
end_date_time: 1704123938
|
|
title: title of the incident
|
|
created_at: '2025-01-09 04:12:01'
|
|
updated_at: '2025-01-09 04:12:01'
|
|
state: INVESTIGATING
|
|
status: OPEN
|
|
id: 4
|
|
IncidentResponse:
|
|
description: Incident response schema
|
|
allOf:
|
|
- "$ref": "#/components/schemas/Incident"
|
|
Comment:
|
|
type: object
|
|
description: Comment of an incident
|
|
properties:
|
|
comment:
|
|
type: string
|
|
example: comment 1
|
|
commented_at:
|
|
type: integer
|
|
example: 1736398336
|
|
state:
|
|
type: string
|
|
example: IDENTIFIED
|
|
example:
|
|
body: comment 2
|
|
commented_at: 1736398336
|
|
state: IDENTIFIED
|
|
CommentResponse:
|
|
type: object
|
|
description: Comment Response
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: ID of the comment
|
|
example: 60
|
|
comment:
|
|
type: string
|
|
description: The content of the comment
|
|
example: Sometimes, you want all the goodness of moment#from but you don't
|
|
want to have to create two moments, you just want to display a length
|
|
of time.
|
|
incident_id:
|
|
type: integer
|
|
description: ID of the associated incident
|
|
example: 24
|
|
commented_at:
|
|
type: integer
|
|
description: Timestamp when the comment was added
|
|
example: 1736398336
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the comment was created in ISO 8601 format
|
|
example: '2025-01-09 04:52:16'
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the comment was last updated in ISO 8601 format
|
|
example: '2025-01-09 04:52:16'
|
|
status:
|
|
type: string
|
|
description: Current status of the comment
|
|
example: ACTIVE
|
|
state:
|
|
type: string
|
|
description: the current status of the incident
|
|
example: INVESTIGATING
|
|
enum:
|
|
- INVESTIGATING
|
|
- IDENTIFIED
|
|
- MONITORING
|
|
- RESOLVED
|
|
example:
|
|
id: 60
|
|
comment: Sometimes, you want all the goodness of moment
|
|
incident_id: 24
|
|
commented_at: 1736398336
|
|
created_at: '2025-01-09 04:52:16'
|
|
updated_at: '2025-01-09 04:52:16'
|
|
status: ACTIVE
|
|
state: MONITORING
|
|
IncidentStatus:
|
|
type: object
|
|
description: Status of the incident
|
|
properties:
|
|
isIdentified:
|
|
type: boolean
|
|
description: Has the incident been indetified
|
|
example: true
|
|
isResolved:
|
|
type: boolean
|
|
description: has the incident been resolved
|
|
example: true
|
|
endDatetime:
|
|
type: integer
|
|
description: Incident end time
|
|
example: 1731901920
|
|
example:
|
|
isIdentified: true
|
|
isResolved: true
|
|
endDatetime: 1731901920
|
|
IncidentCreateRequest:
|
|
title: Incident Create Request Body
|
|
type: object
|
|
description: body of an incident
|
|
required:
|
|
- title
|
|
- start_date_time
|
|
properties:
|
|
start_date_time:
|
|
type: integer
|
|
description: UTC timestamp in seconds
|
|
example: 1731901920
|
|
title:
|
|
type: string
|
|
example: Outage in mumbai
|
|
description: title of the incident
|
|
example:
|
|
start_date_time: 1731901920
|
|
title: title of the incident
|
|
responses:
|
|
Response401:
|
|
description: Bad API keys response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: Invalid token response
|
|
example: invalid token
|
|
example:
|
|
error: invalid token
|
|
Response400:
|
|
description: bad request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: bad request while calling kener apis
|
|
example: unknown tags
|
|
example:
|
|
error: unknown tags
|
|
examples:
|
|
GetMonitorStatusExample200:
|
|
summary: response of get status of a monitor
|
|
description: Some Description
|
|
value:
|
|
status: UP
|
|
uptime: '100'
|
|
lastUpdatedAt: 1731901920
|
|
DegradedRequestBody:
|
|
summary: update to degraded
|
|
description: Some Description
|
|
value:
|
|
status: DEGRADED
|
|
timestampInSeconds: 1731251760
|
|
latency: 100
|
|
tag: earth
|
|
CreateIncidentResponse:
|
|
summary: create incident response
|
|
description: create incident response
|
|
value:
|
|
start_date_time: 1731901920
|
|
end_date_time: 1731901920
|
|
id: 4
|
|
created_at: '2025-01-09 04:12:01'
|
|
updated_at: '2025-01-10 04:12:01'
|
|
title: title of the incident
|
|
status: OPEN
|
|
state: INVESTIGATING
|
|
CreateIncidentRequest:
|
|
summary: create incident request body
|
|
description: create incident request body
|
|
value:
|
|
start_date_time: 1731901920
|
|
title: title of the incident
|
|
SearchIncidentsResponse:
|
|
summary: array of incidents
|
|
description: Some Description
|
|
value:
|
|
- id: 2
|
|
title: future wala
|
|
start_date_time: 1736774486
|
|
end_date_time: 1737033787
|
|
created_at: '2025-01-12 13:21:32'
|
|
updated_at: '2025-01-12 13:23:15'
|
|
status: OPEN
|
|
state: RESOLVED
|
|
- id: 1
|
|
title: internatiinal asda
|
|
start_date_time: 1736684329
|
|
end_date_time:
|
|
created_at: '2025-01-12 12:18:53'
|
|
updated_at: '2025-01-12 13:21:32'
|
|
status: OPEN
|
|
state: INVESTIGATING
|
|
CommentsResponse:
|
|
summary: list of comments
|
|
description: Some Description
|
|
value:
|
|
- id: 58
|
|
comment: idensad
|
|
incident_id: 24
|
|
commented_at: 1736398295
|
|
created_at: '2025-01-09 04:51:37'
|
|
updated_at: '2025-01-09 04:51:37'
|
|
status: ACTIVE
|
|
state: IDENTIFIED
|
|
- id: 57
|
|
comment: Sometimes, you want all the goodness of moment#from but you don't
|
|
want to have to create two moments, you just want to display a length of
|
|
time.
|
|
incident_id: 24
|
|
commented_at: 1736398279
|
|
created_at: '2025-01-09 04:51:19'
|
|
updated_at: '2025-01-09 04:51:19'
|
|
status: ACTIVE
|
|
state: INVESTIGATING
|
|
CommentRequestBody:
|
|
summary: request body for a update
|
|
description: request body for a update to add in an incident
|
|
value:
|
|
comment: This is a comment
|
|
commented_at: 1736398336
|
|
state: IDENTIFIED
|
|
CreateCommentResponse:
|
|
summary: create update response body sample
|
|
description: create update response body sample
|
|
value:
|
|
id: 60
|
|
comment: Sometimes, you want all the goodness of moment
|
|
incident_id: 24
|
|
commented_at: 1736398336
|
|
created_at: '2025-01-09 04:52:16'
|
|
updated_at: '2025-01-09 04:52:16'
|
|
status: ACTIVE
|
|
state: MONITORING
|
|
paths:
|
|
"/api/status":
|
|
post:
|
|
operationId: updateMonitorStatus
|
|
summary: Update status of a monitor
|
|
description: Update status of a monitor at a given timestamp UTC
|
|
tags:
|
|
- Monitors
|
|
security:
|
|
- bearerAuth: []
|
|
requestBody:
|
|
required: true
|
|
description: request body to update status of a monitor
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/MonitorStatus"
|
|
examples:
|
|
degraded:
|
|
"$ref": "#/components/examples/DegradedRequestBody"
|
|
responses:
|
|
'200':
|
|
description: Status updated successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
status:
|
|
type: integer
|
|
example: 200
|
|
message:
|
|
type: string
|
|
example: success at 1731251760
|
|
example:
|
|
status: 200
|
|
message: success at 1731251760
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
get:
|
|
operationId: getMonitorStatus
|
|
summary: Get status of a monitor
|
|
description: get status of a monitor at timestamp
|
|
tags:
|
|
- Monitors
|
|
security:
|
|
- bearerAuth: []
|
|
parameters:
|
|
- name: tag
|
|
in: query
|
|
required: true
|
|
description: monitor tag to get status of it
|
|
schema:
|
|
type: string
|
|
example: earth
|
|
responses:
|
|
'200':
|
|
description: Monitor status retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/StatusResponse"
|
|
examples:
|
|
successExample:
|
|
"$ref": "#/components/examples/GetMonitorStatusExample200"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
"/api/incident":
|
|
post:
|
|
operationId: createIncident
|
|
summary: Create a new incident
|
|
description: API to create incidents
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
requestBody:
|
|
required: true
|
|
description: request body to manually create an incident
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/IncidentCreateRequest"
|
|
examples:
|
|
sample:
|
|
"$ref": "#/components/examples/CreateIncidentRequest"
|
|
responses:
|
|
'200':
|
|
description: Incident created successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/IncidentResponse"
|
|
examples:
|
|
success:
|
|
"$ref": "#/components/examples/CreateIncidentResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
get:
|
|
operationId: searchIncidents
|
|
summary: Search for incidents
|
|
description: API to get incidents
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
parameters:
|
|
- name: status
|
|
in: query
|
|
description: status of the incident. Can be open or close. close means deleted
|
|
schema:
|
|
type: string
|
|
description: status of the incident. Can be open or close. close means deleted
|
|
enum:
|
|
- OPEN
|
|
- CLOSED
|
|
default: OPEN
|
|
example: OPEN
|
|
- name: state
|
|
in: query
|
|
description: state of the incident. Can be open or close
|
|
schema:
|
|
type: string
|
|
description: state of the incident. Can be open or close
|
|
enum:
|
|
- INVESTIGATING
|
|
- IDENTIFIED
|
|
- MONITORING
|
|
- RESOLVED
|
|
default: INVESTIGATING
|
|
example: IDENTIFIED
|
|
- name: page
|
|
in: query
|
|
description: page number
|
|
schema:
|
|
type: integer
|
|
description: page number
|
|
default: 1
|
|
minimum: 1
|
|
example: 1
|
|
- name: limit
|
|
in: query
|
|
description: how many per page
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
description: how many per page
|
|
maximum: 100
|
|
example: 10
|
|
- name: start_date_time
|
|
description: start time
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: start time
|
|
example: 1731866475
|
|
- name: end_date_time
|
|
description: end time
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: end time
|
|
example: 1731866475
|
|
responses:
|
|
'200':
|
|
description: Search results retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
"$ref": "#/components/schemas/IncidentResponse"
|
|
examples:
|
|
success:
|
|
"$ref": "#/components/examples/SearchIncidentsResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
"/api/incident/{incident_id}":
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
description: incident id as an integer to get incident by id
|
|
schema:
|
|
type: integer
|
|
example: 4
|
|
get:
|
|
operationId: getIncident
|
|
summary: Get an incident by id
|
|
description: API to get an incident by incident id
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
responses:
|
|
'200':
|
|
description: Incident retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/IncidentResponse"
|
|
examples:
|
|
success:
|
|
"$ref": "#/components/examples/CreateIncidentResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
patch:
|
|
operationId: updateIncident
|
|
summary: Update an incident
|
|
description: API to update an incident by incident id
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
requestBody:
|
|
required: true
|
|
description: search for an incident
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/Incident"
|
|
examples:
|
|
sample:
|
|
"$ref": "#/components/examples/CreateIncidentRequest"
|
|
responses:
|
|
'200':
|
|
description: Incident updated successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/IncidentResponse"
|
|
examples:
|
|
success:
|
|
"$ref": "#/components/examples/CreateIncidentResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
"/api/incident/{incident_id}/updates":
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
description: incident id to fetch comment for
|
|
schema:
|
|
type: integer
|
|
example: 4
|
|
post:
|
|
operationId: addIncidentComment
|
|
summary: Add an update to an incident
|
|
description: API to create update for an incident
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
requestBody:
|
|
required: true
|
|
description: body to add an update
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/Comment"
|
|
examples:
|
|
sample:
|
|
"$ref": "#/components/examples/CommentRequestBody"
|
|
responses:
|
|
'200':
|
|
description: Comment added successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
"$ref": "#/components/schemas/CommentResponse"
|
|
examples:
|
|
sample:
|
|
"$ref": "#/components/examples/CreateCommentResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
get:
|
|
operationId: getIncidentComments
|
|
summary: Get updates for an incident
|
|
description: API to get updates for an incident
|
|
tags:
|
|
- Incidents
|
|
security:
|
|
- bearerAuth: []
|
|
responses:
|
|
'200':
|
|
description: updates retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
"$ref": "#/components/schemas/CommentResponse"
|
|
examples:
|
|
success:
|
|
"$ref": "#/components/examples/CommentsResponse"
|
|
'400':
|
|
"$ref": "#/components/responses/Response400"
|
|
'401':
|
|
"$ref": "#/components/responses/Response401"
|
|
"/api/incident/{incident_id}/monitors":
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
description: incident id to fetch comment for
|
|
schema:
|
|
type: integer
|
|
example: 4
|
|
get:
|
|
summary: Get monitors for an incident
|
|
operationId: getIncidentMonitors
|
|
tags:
|
|
- Incidents
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
description: The ID of the incident
|
|
responses:
|
|
'200':
|
|
description: List of monitors for the incident
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
monitor_tag:
|
|
type: string
|
|
description: The tag of the monitor
|
|
example: earth
|
|
monitor_impact:
|
|
type: string
|
|
description: The impact status of the monitor
|
|
example: DOWN
|
|
security:
|
|
- bearerAuth: []
|
|
post:
|
|
summary: Add a monitor to an incident
|
|
operationId: addIncidentMonitor
|
|
tags:
|
|
- Incidents
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
description: The ID of the incident
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
tag:
|
|
type: string
|
|
description: The tag for the monitor
|
|
example: okbookmarks
|
|
impact:
|
|
type: string
|
|
description: The impact status of the monitor
|
|
example: DEGRADED
|
|
responses:
|
|
'200':
|
|
description: Monitor added successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
monitor_tag:
|
|
type: string
|
|
description: The tag of the monitor
|
|
example: okbookmarks
|
|
monitor_impact:
|
|
type: string
|
|
description: The impact status of the monitor
|
|
example: DEGRADED
|
|
security:
|
|
- bearerAuth: []
|
|
delete:
|
|
summary: Delete a monitor from an incident
|
|
operationId: deleteIncidentMonitor
|
|
tags:
|
|
- Incidents
|
|
parameters:
|
|
- name: incident_id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
description: The ID of the incident
|
|
- name: tag
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
description: The tag of the monitor to delete
|
|
responses:
|
|
'200':
|
|
description: Monitor deleted successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: Confirmation message
|
|
example: Monitor deleted successfully
|
|
security:
|
|
- bearerAuth: []
|