DEVELOP.md in dkron-ruby-1.0.0 vs DEVELOP.md in dkron-ruby-3.0.0

- old
+ new

@@ -1,596 +1,599 @@ -`POST` to https://generator.swagger.io/api/gen/clients/ruby -```json -{ - "options":{ - "gemName":"dkron-ruby", - "moduleName":"Dkron" - }, - "spec":{ - "swagger":"2.0", - "basePath":"/v1", - "host":"localhost:8080", - "consumes":[ - "application/json" - ], - "produces":[ - "application/json" - ], - "schemes":[ - "http" - ], - "info":{ - "version":"2.2", - "title":"Dkron REST API", - "description":"You can communicate with Dkron using a RESTful JSON API over HTTP. Dkron nodes usually listen on port `8080` for API requests. All examples in this section assume that you've found a running leader at `localhost:8080`.\n\nDkron implements a RESTful JSON API over HTTP to communicate with software clients. Dkron listens in port `8080` by default. All examples in this section assume that you're using the default port.\n\nDefault API responses are unformatted JSON add the `pretty=true` param to format the response.\n" - }, - "paths":{ - "/":{ - "get":{ - "description":"Gets `Status` object.\n", - "operationId":"status", - "tags":[ - "default" - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/status" - } - } - } - } - }, - "/jobs":{ - "get":{ - "description":"List jobs.\n", - "parameters":[ - { - "in":"query", - "name":"metadata", - "type":"array", - "collectionFormat":"multi", - "items":{ - "type":"string" - }, - "description":"Filter jobs by metadata" - } - ], - "operationId":"getJobs", - "tags":[ - "jobs" - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/job" - } - } - } - } - }, - "post":{ - "description":"Create or updates a new job.\n", - "operationId":"createOrUpdateJob", - "tags":[ - "jobs" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"Updated job object", - "required":true, - "schema":{ - "$ref":"#/definitions/job" - } - }, - { - "in":"query", - "name":"runoncreate", - "description":"If present, regardless of any value, causes the job to be run immediately after being succesfully created or updated.", - "required":false, - "schema":{ - "type":"boolean" - }, - "allowEmptyValue":true - } - ], - "responses":{ - "201":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/job" - } - } - } - } - }, - "/jobs/{job_name}":{ - "get":{ - "description":"Show a job.\n", - "operationId":"showJobByName", - "tags":[ - "jobs" - ], - "parameters":[ - { - "in":"path", - "name":"job_name", - "description":"The job that needs to be fetched.", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/job" - } - } - } - }, - "delete":{ - "description":"Delete a job.\n", - "operationId":"deleteJob", - "tags":[ - "jobs" - ], - "parameters":[ - { - "in":"path", - "name":"job_name", - "description":"The job that needs to be deleted.", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/job" - } - } - } - }, - "post":{ - "description":"Executes a job.\n", - "operationId":"runJob", - "tags":[ - "jobs" - ], - "parameters":[ - { - "in":"path", - "name":"job_name", - "description":"The job that needs to be run.", - "required":true, - "type":"string" - } - ], - "responses":{ - "202":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/job" - } - } - } - } - }, - "/jobs/{job_name}/toggle":{ - "post":{ - "description":"Toggle a job.\n", - "operationId":"toggleJob", - "tags":[ - "jobs" - ], - "parameters":[ - { - "in":"path", - "name":"job_name", - "description":"The job that needs to be toggled.", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/job" - } - } - } - } - }, - "/members":{ - "get":{ - "description":"List members.\n", - "operationId":"getMember", - "tags":[ - "members" - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/member" - } - } - } - } - } - }, - "/leader":{ - "get":{ - "description":"List leader of cluster.\n", - "operationId":"getLeader", - "tags":[ - "default" - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "$ref":"#/definitions/member" - } - } - } - } - }, - "/leave":{ - "post":{ - "description":"Force the node to leave the cluster.\n", - "operationId":"leave", - "tags":[ - "default" - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/member" - } - } - } - } - } - }, - "/jobs/{job_name}/executions":{ - "get":{ - "description":"List executions.\n", - "operationId":"listExecutionsByJob", - "tags":[ - "executions" - ], - "parameters":[ - { - "in":"path", - "name":"job_name", - "description":"The job that owns the executions to be fetched.", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"Successful response", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/execution" - } - } - } - } - } - } - }, - "definitions":{ - "status":{ - "type":"object", - "description":"Status represents details about the node.", - "readOnly":true, - "properties":{ - "agent":{ - "description":"Node basic details", - "readOnly":true, - "additionalProperties":{ - "type":"object" - } - }, - "serf":{ - "description":"Serf status", - "readOnly":true, - "additionalProperties":{ - "type":"object" - } - }, - "tags":{ - "description":"Tags asociated with this node", - "readOnly":true, - "additionalProperties":{ - "type":"string" - } - } - } - }, - "job":{ - "type":"object", - "description":"A Job represents a scheduled task to execute.", - "required":[ - "name", - "schedule" - ], - "properties":{ - "name":{ - "type":"string", - "description":"Name for the job.", - "readOnly":false, - "example":"job1" - }, - "displayname":{ - "type":"string", - "description":"Nice name for the job. Optional.", - "readOnly":false - }, - "schedule":{ - "type":"string", - "description":"Cron expression for the job.", - "readOnly":false, - "example":"@every 10s" - }, - "timezone":{ - "type":"string", - "description":"Timezone where the job will be executed. By default and when field is set to empty string, the job will run in local time.", - "readOnly":false, - "example":"Europe/Berlin" - }, - "owner":{ - "type":"string", - "description":"Owner of the job", - "readOnly":false, - "example":"Platform Team" - }, - "owner_email":{ - "type":"string", - "description":"Email of the owner", - "readOnly":false, - "example":"platform@example.com" - }, - "success_count":{ - "type":"integer", - "description":"Number of successful executions", - "readOnly":true - }, - "error_count":{ - "type":"integer", - "description":"Number of failed executions", - "readOnly":true - }, - "last_success":{ - "type":"string", - "format":"date-time", - "description":"Last time this job executed successfully", - "readOnly":true - }, - "last_error":{ - "type":"string", - "format":"date-time", - "description":"Last time this job failed", - "readOnly":true - }, - "disabled":{ - "type":"boolean", - "description":"Disabled state of the job", - "readOnly":false - }, - "tags":{ - "type":"object", - "description":"Target nodes tags of this job", - "additionalProperties":{ - "type":"string" - }, - "readOnly":false, - "example":{ - "server":"true" - } - }, - "metadata":{ - "type":"object", - "description":"Extra metadata tags for this job", - "additionalProperties":{ - "type":"string" - }, - "readOnly":false, - "example":{ - "office":"Barcelona" - } - }, - "retries":{ - "type":"integer", - "description":"Number of times to retry a failed job execution", - "example":2, - "readOnly":false - }, - "parent_job":{ - "type":"string", - "description":"The name/id of the job that will trigger the execution of this job", - "example":"parent_job", - "readOnly":false - }, - "dependent_jobs":{ - "type":"array", - "items":{ - "type":"string" - }, - "description":"Array containing the jobs that depends on this one", - "example":[ - "dependent_job" - ], - "readOnly":true - }, - "processors":{ - "$ref":"#/definitions/processors" - }, - "concurrency":{ - "type":"string", - "description":"Concurrency policy for the job allow/forbid", - "example":"allow", - "readOnly":false - }, - "executor":{ - "type":"string", - "description":"Executor plugin used to run the job", - "readOnly":false, - "example":"shell" - }, - "executor_config":{ - "type":"object", - "description":"Executor plugin parameters", - "additionalProperties":{ - "type":"string" - }, - "example":{ - "command":"echo 'Hello from Dkron'" - } - }, - "status":{ - "type":"string", - "readOnly":true, - "description":"Status of the job", - "example":"success" - } - } - }, - "member":{ - "type":"object", - "description":"A member represents a cluster member node.", - "properties":{ - "Name":{ - "type":"string", - "description":"Node name", - "example":"dkron1" - }, - "Addr":{ - "type":"string", - "description":"IP Address", - "example":"192.168.1.137" - }, - "Port":{ - "type":"integer", - "description":"Port number", - "example":8946 - }, - "Tags":{ - "type":"object", - "description":"Tags asociated with this node", - "additionalProperties":{ - "type":"string" - }, - "example":{ - "rpc_addr":"192.168.1.137:6868", - "server":"true", - "version\"":"1.0.0" - } - }, - "Status":{ - "type":"integer", - "description":"The serf status of the node see: https://godoc.org/github.com/hashicorp/serf/serf#MemberStatus", - "example":1 - }, - "ProtocolMin":{ - "type":"integer", - "description":"Serf protocol minimum version this node can understand or speak", - "example":5 - }, - "ProtocolMax":{ - "type":"integer", - "description":"Serf protocol maximum version this node can understand or speak", - "example":2 - }, - "ProtocolCur":{ - "type":"integer", - "description":"Serf protocol current version this node can understand or speak", - "example":2 - }, - "DelegateMin":{ - "type":"integer", - "description":"Serf delegate protocol minimum version this node can understand or speak" - }, - "DelegateMax":{ - "type":"integer", - "description":"Serf delegate protocol maximum version this node can understand or speak", - "example":5 - }, - "DelegateCur":{ - "type":"integer", - "description":"Serf delegate protocol current version this node can understand or speak", - "example":4 - } - } - }, - "execution":{ - "type":"object", - "description":"An execution represents a timed job run.", - "properties":{ - "job_name":{ - "type":"string", - "description":"job name", - "example":"job_1" - }, - "started_at":{ - "type":"string", - "format":"date-time", - "description":"start time of the execution" - }, - "finished_at":{ - "type":"string", - "format":"date-time", - "description":"when the execution finished running" - }, - "success":{ - "type":"boolean", - "description":"the execution run successfuly" - }, - "output":{ - "type":"string", - "description":"partial output of the command execution", - "example":"Hello from Dkron" - }, - "node_name":{ - "type":"string", - "description":"name of the node that executed the command", - "example":"dkron1" - } - } - }, - "processors":{ - "type":"object", - "description":"Processor plugins used to process executions results of this job", - "additionalProperties":{ - "type":"object", - "additionalProperties":{ - "type":"string" - } - }, - "example":{ - "files":{ - "forward":true - } - } - } - } - } -} -``` +1. Download latest Swagger spec: https://dkron.io/swagger.yaml +2. `POST` to https://generator.swagger.io/api/gen/clients/ruby with body (replace spec with latest from above): + ```json + { + "options":{ + "gemName":"dkron-ruby", + "moduleName":"Dkron" + }, + "spec":{ + "swagger":"2.0", + "basePath":"/v1", + "host":"localhost:8080", + "consumes":[ + "application/json" + ], + "produces":[ + "application/json" + ], + "schemes":[ + "http" + ], + "info":{ + "version":"2.2", + "title":"Dkron REST API", + "description":"You can communicate with Dkron using a RESTful JSON API over HTTP. Dkron nodes usually listen on port `8080` for API requests. All examples in this section assume that you've found a running leader at `localhost:8080`.\n\nDkron implements a RESTful JSON API over HTTP to communicate with software clients. Dkron listens in port `8080` by default. All examples in this section assume that you're using the default port.\n\nDefault API responses are unformatted JSON add the `pretty=true` param to format the response.\n" + }, + "paths":{ + "/":{ + "get":{ + "description":"Gets `Status` object.\n", + "operationId":"status", + "tags":[ + "default" + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/status" + } + } + } + } + }, + "/jobs":{ + "get":{ + "description":"List jobs.\n", + "parameters":[ + { + "in":"query", + "name":"metadata", + "type":"array", + "collectionFormat":"multi", + "items":{ + "type":"string" + }, + "description":"Filter jobs by metadata" + } + ], + "operationId":"getJobs", + "tags":[ + "jobs" + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "type":"array", + "items":{ + "$ref":"#/definitions/job" + } + } + } + } + }, + "post":{ + "description":"Create or updates a new job.\n", + "operationId":"createOrUpdateJob", + "tags":[ + "jobs" + ], + "parameters":[ + { + "in":"body", + "name":"body", + "description":"Updated job object", + "required":true, + "schema":{ + "$ref":"#/definitions/job" + } + }, + { + "in":"query", + "name":"runoncreate", + "description":"If present, regardless of any value, causes the job to be run immediately after being succesfully created or updated.", + "required":false, + "schema":{ + "type":"boolean" + }, + "allowEmptyValue":true + } + ], + "responses":{ + "201":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/job" + } + } + } + } + }, + "/jobs/{job_name}":{ + "get":{ + "description":"Show a job.\n", + "operationId":"showJobByName", + "tags":[ + "jobs" + ], + "parameters":[ + { + "in":"path", + "name":"job_name", + "description":"The job that needs to be fetched.", + "required":true, + "type":"string" + } + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/job" + } + } + } + }, + "delete":{ + "description":"Delete a job.\n", + "operationId":"deleteJob", + "tags":[ + "jobs" + ], + "parameters":[ + { + "in":"path", + "name":"job_name", + "description":"The job that needs to be deleted.", + "required":true, + "type":"string" + } + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/job" + } + } + } + }, + "post":{ + "description":"Executes a job.\n", + "operationId":"runJob", + "tags":[ + "jobs" + ], + "parameters":[ + { + "in":"path", + "name":"job_name", + "description":"The job that needs to be run.", + "required":true, + "type":"string" + } + ], + "responses":{ + "202":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/job" + } + } + } + } + }, + "/jobs/{job_name}/toggle":{ + "post":{ + "description":"Toggle a job.\n", + "operationId":"toggleJob", + "tags":[ + "jobs" + ], + "parameters":[ + { + "in":"path", + "name":"job_name", + "description":"The job that needs to be toggled.", + "required":true, + "type":"string" + } + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/job" + } + } + } + } + }, + "/members":{ + "get":{ + "description":"List members.\n", + "operationId":"getMember", + "tags":[ + "members" + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "type":"array", + "items":{ + "$ref":"#/definitions/member" + } + } + } + } + } + }, + "/leader":{ + "get":{ + "description":"List leader of cluster.\n", + "operationId":"getLeader", + "tags":[ + "default" + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "$ref":"#/definitions/member" + } + } + } + } + }, + "/leave":{ + "post":{ + "description":"Force the node to leave the cluster.\n", + "operationId":"leave", + "tags":[ + "default" + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "type":"array", + "items":{ + "$ref":"#/definitions/member" + } + } + } + } + } + }, + "/jobs/{job_name}/executions":{ + "get":{ + "description":"List executions.\n", + "operationId":"listExecutionsByJob", + "tags":[ + "executions" + ], + "parameters":[ + { + "in":"path", + "name":"job_name", + "description":"The job that owns the executions to be fetched.", + "required":true, + "type":"string" + } + ], + "responses":{ + "200":{ + "description":"Successful response", + "schema":{ + "type":"array", + "items":{ + "$ref":"#/definitions/execution" + } + } + } + } + } + } + }, + "definitions":{ + "status":{ + "type":"object", + "description":"Status represents details about the node.", + "readOnly":true, + "properties":{ + "agent":{ + "description":"Node basic details", + "readOnly":true, + "additionalProperties":{ + "type":"object" + } + }, + "serf":{ + "description":"Serf status", + "readOnly":true, + "additionalProperties":{ + "type":"object" + } + }, + "tags":{ + "description":"Tags asociated with this node", + "readOnly":true, + "additionalProperties":{ + "type":"string" + } + } + } + }, + "job":{ + "type":"object", + "description":"A Job represents a scheduled task to execute.", + "required":[ + "name", + "schedule" + ], + "properties":{ + "name":{ + "type":"string", + "description":"Name for the job.", + "readOnly":false, + "example":"job1" + }, + "displayname":{ + "type":"string", + "description":"Nice name for the job. Optional.", + "readOnly":false + }, + "schedule":{ + "type":"string", + "description":"Cron expression for the job.", + "readOnly":false, + "example":"@every 10s" + }, + "timezone":{ + "type":"string", + "description":"Timezone where the job will be executed. By default and when field is set to empty string, the job will run in local time.", + "readOnly":false, + "example":"Europe/Berlin" + }, + "owner":{ + "type":"string", + "description":"Owner of the job", + "readOnly":false, + "example":"Platform Team" + }, + "owner_email":{ + "type":"string", + "description":"Email of the owner", + "readOnly":false, + "example":"platform@example.com" + }, + "success_count":{ + "type":"integer", + "description":"Number of successful executions", + "readOnly":true + }, + "error_count":{ + "type":"integer", + "description":"Number of failed executions", + "readOnly":true + }, + "last_success":{ + "type":"string", + "format":"date-time", + "description":"Last time this job executed successfully", + "readOnly":true + }, + "last_error":{ + "type":"string", + "format":"date-time", + "description":"Last time this job failed", + "readOnly":true + }, + "disabled":{ + "type":"boolean", + "description":"Disabled state of the job", + "readOnly":false + }, + "tags":{ + "type":"object", + "description":"Target nodes tags of this job", + "additionalProperties":{ + "type":"string" + }, + "readOnly":false, + "example":{ + "server":"true" + } + }, + "metadata":{ + "type":"object", + "description":"Extra metadata tags for this job", + "additionalProperties":{ + "type":"string" + }, + "readOnly":false, + "example":{ + "office":"Barcelona" + } + }, + "retries":{ + "type":"integer", + "description":"Number of times to retry a failed job execution", + "example":2, + "readOnly":false + }, + "parent_job":{ + "type":"string", + "description":"The name/id of the job that will trigger the execution of this job", + "example":"parent_job", + "readOnly":false + }, + "dependent_jobs":{ + "type":"array", + "items":{ + "type":"string" + }, + "description":"Array containing the jobs that depends on this one", + "example":[ + "dependent_job" + ], + "readOnly":true + }, + "processors":{ + "$ref":"#/definitions/processors" + }, + "concurrency":{ + "type":"string", + "description":"Concurrency policy for the job allow/forbid", + "example":"allow", + "readOnly":false + }, + "executor":{ + "type":"string", + "description":"Executor plugin used to run the job", + "readOnly":false, + "example":"shell" + }, + "executor_config":{ + "type":"object", + "description":"Executor plugin parameters", + "additionalProperties":{ + "type":"string" + }, + "example":{ + "command":"echo 'Hello from Dkron'" + } + }, + "status":{ + "type":"string", + "readOnly":true, + "description":"Status of the job", + "example":"success" + } + } + }, + "member":{ + "type":"object", + "description":"A member represents a cluster member node.", + "properties":{ + "Name":{ + "type":"string", + "description":"Node name", + "example":"dkron1" + }, + "Addr":{ + "type":"string", + "description":"IP Address", + "example":"192.168.1.137" + }, + "Port":{ + "type":"integer", + "description":"Port number", + "example":8946 + }, + "Tags":{ + "type":"object", + "description":"Tags asociated with this node", + "additionalProperties":{ + "type":"string" + }, + "example":{ + "rpc_addr":"192.168.1.137:6868", + "server":"true", + "version\"":"1.0.0" + } + }, + "Status":{ + "type":"integer", + "description":"The serf status of the node see: https://godoc.org/github.com/hashicorp/serf/serf#MemberStatus", + "example":1 + }, + "ProtocolMin":{ + "type":"integer", + "description":"Serf protocol minimum version this node can understand or speak", + "example":5 + }, + "ProtocolMax":{ + "type":"integer", + "description":"Serf protocol maximum version this node can understand or speak", + "example":2 + }, + "ProtocolCur":{ + "type":"integer", + "description":"Serf protocol current version this node can understand or speak", + "example":2 + }, + "DelegateMin":{ + "type":"integer", + "description":"Serf delegate protocol minimum version this node can understand or speak" + }, + "DelegateMax":{ + "type":"integer", + "description":"Serf delegate protocol maximum version this node can understand or speak", + "example":5 + }, + "DelegateCur":{ + "type":"integer", + "description":"Serf delegate protocol current version this node can understand or speak", + "example":4 + } + } + }, + "execution":{ + "type":"object", + "description":"An execution represents a timed job run.", + "properties":{ + "job_name":{ + "type":"string", + "description":"job name", + "example":"job_1" + }, + "started_at":{ + "type":"string", + "format":"date-time", + "description":"start time of the execution" + }, + "finished_at":{ + "type":"string", + "format":"date-time", + "description":"when the execution finished running" + }, + "success":{ + "type":"boolean", + "description":"the execution run successfuly" + }, + "output":{ + "type":"string", + "description":"partial output of the command execution", + "example":"Hello from Dkron" + }, + "node_name":{ + "type":"string", + "description":"name of the node that executed the command", + "example":"dkron1" + } + } + }, + "processors":{ + "type":"object", + "description":"Processor plugins used to process executions results of this job", + "additionalProperties":{ + "type":"object", + "additionalProperties":{ + "type":"string" + } + }, + "example":{ + "files":{ + "forward":true + } + } + } + } + } + } + ``` +3. Generate new gem with `gem build dkron-ruby.gemspec` +4. Publish gem with `gem push [gemfile]` \ No newline at end of file