openapi: 3.0.0 info: version: '1' title: 'Perl Async::Microservice::Time' description: 'demo time service for Async::Microservice, supports jsonp with _cb parameter' termsOfService: "http://toterms/" contact: name: Jozef email: some@email license: name: Perl Licence url: https://perldoc.perl.org/index-licence.html servers: - url: /v1/ paths: '/datetime': get: description: 'Returns detailed date-time' parameters: - name: time_zone in: query description: timezone string required: false schema: type: string default: UTC responses: 200: description: 'current time' content: 'application/json': schema: $ref: '#/components/schemas/Detailed-DateTime' 405: $ref: '#/components/responses/Input-Processing-Error' 500: $ref: '#/components/responses/Internal-Server-Error' post: description: "get datetime from epoch" requestBody: content: 'application/json': schema: type: object properties: epoch: type: integer example: 1586355387 responses: 200: description: 'current time' content: 'application/json': schema: $ref: '#/components/schemas/Detailed-DateTime' 405: $ref: '#/components/responses/Input-Processing-Error' 500: $ref: '#/components/responses/Internal-Server-Error' '/datetime/{time_zone_part1}/{time_zone_part2}': get: description: 'Returns detailed date-time' parameters: - name: time_zone_part1 in: path description: timezone part1 string required: true schema: type: string example: Europe - name: time_zone_part2 in: path description: timezone part2 string required: true schema: type: string example: Vienna responses: 200: description: 'current time' content: 'application/json': schema: $ref: '#/components/schemas/Detailed-DateTime' 405: $ref: '#/components/responses/Input-Processing-Error' 500: $ref: '#/components/responses/Internal-Server-Error' '/datetime/span/{s_date}': get: description: 'Returns time span between now and start date + years period in different units' parameters: - name: s_date in: path description: start date in format YYYYMMDD or "now" required: true schema: type: string example: 20010924 - name: r_age in: query description: date span in years required: false schema: type: number default: 65 minimum: 1 maximum: 200 - name: m_income in: query description: monthly increase to sum-up required: false schema: type: number minimum: 1 responses: 200: description: 'weeks left' content: 'application/json': schema: $ref: '#/components/schemas/Detailed-Weeks-Left' 405: $ref: '#/components/responses/Input-Processing-Error' 500: $ref: '#/components/responses/Internal-Server-Error' '/epoch': get: description: 'get number of seconds since 1970-01-01T00:00:00' responses: 200: description: 'epoch seconds' content: 'application/json': schema: type: object properties: epoch: type: integer example: 1586355387 500: $ref: '#/components/responses/Internal-Server-Error' '/sleep': get: description: 'Sleep request' parameters: - name: duration in: query description: sleep length in seconds required: false schema: type: number default: 'random number < 10 && > 0' minimum: 0 exclusiveMinimum: true responses: 200: description: 'return ok after sleep time' content: 'application/json': schema: type: object properties: duration: type: number example: 3.23 start: type: number example: 1586453521.4604 stop: type: number example: 1586453524.69395 405: $ref: '#/components/responses/Input-Processing-Error' 500: $ref: '#/components/responses/Internal-Server-Error' '/hcheck': get: description: 'Returns 200 response and Perl package name as text when service available' responses: 200: description: 'healthy' content: 'text/plain': example: 'CRS::Somed::Att::Service' 'application/json': example: '{"data": "Service-name: async-microservice-time\nAPI-version: 1\nOK\n"}' 503: description: 'unhealthy' content: 'text/plain': example: 'shutting down' 'application/json': example: '{"data": "shutting down"}' components: responses: 'Internal-Server-Error': description: 'Internal server error.' content: 'text/plain': example: 'Some exception at lib/Async/Microservice/Time.pm line 42.' 'Input-Processing-Error': description: 'Input processing error' content: 'application/json': schema: $ref: '#/components/schemas/Error-Response' 'text/plain': example: 'requires application/json data' schemas: 'Detailed-DateTime': type: object properties: datetime: type: string description: "%Y-%m-%d %H:%M:%S %z" example: '2020-04-08 16:06:12 +0200' date: type: string description: "%Y-%m-%d" example: '2020-04-08' time: type: string description: "%H:%M:%S" example: '16:06:12' time_zone: type: string description: "%z" example: '+0200' time_zone_name: type: string description: "%Z" example: 'CEST' day: type: string description: "%d" example: '08' month: type: string description: "%m" example: '04' year: type: string description: "%Y" example: '2020' hour: type: string description: "%H" example: '16' minute: type: string description: "%M" example: '06' second: type: string description: "%S" example: '12' epoch: type: integer description: "seconds since 1970-01-01T00:00:00" example: 1586355387 'Detailed-Weeks-Left': type: object properties: msg: type: string description: 'text message' example: 'you have 105 weeks left' weeks: type: number description: 'number of weeks left' example: 105 'Error-Response': description: 'Error object definition' type: object properties: err_status: type: integer description: error number example: 405 err_msg: type: string description: error message example: 'input format error' required: - err_status