UNPKG

2.99 kBJavaScriptView Raw
1const got = require('got')
2// const convertHrtime = require('convert-hrtime')
3const prometheus = require('prom-client')
4
5const options = {
6 url: 'http://localhost:44444/counter',
7 json: true,
8 retry: {
9 retries: 3,
10 xerrorCodes: ['ERR_SOCKET_BAD_PORT']
11 }
12}
13
14let allTimings = []
15let starter
16let finisher
17
18const apiMetrics = new prometheus.Histogram({
19 name: 'api_requests',
20 help: 'API calls using FB JWT Client',
21 labelNames: ['client_name', 'baseUrl', 'url', 'method', 'status_code', 'status_message', 'error_name'],
22 buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10]
23})
24
25const requestMetrics = new prometheus.Histogram({
26 name: 'jwt_client_requests',
27 help: 'HTTP requests using FB JWT Client',
28 labelNames: ['client_name', 'baseUrl', 'url', 'method', 'status_code', 'status_message', 'error_name'],
29 buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10]
30})
31
32const getResponseLabels = (response) => {
33 const responseLabels = {
34 status_code: response.statusCode
35 }
36 if (response.statusMessage) {
37 responseLabels.status_message = response.statusMessage
38 }
39 if (response.name) {
40 responseLabels.error_name = response.name
41 }
42 return responseLabels
43}
44let requestMetricsEnd
45
46const client = got.extend({
47 timeout: 1000,
48 hooks: {
49 afterResponse: [
50 (response, retryWithMergedOptions) => {
51 requestMetricsEnd(getResponseLabels(response))
52 // finisher = process.hrtime(starter)
53 // allTimings.push(finisher) response.body
54 console.log('afterResponse', response.statusCode) //, Object.keys(response)) //, response) //, response.timings)
55 return response
56 }
57 ],
58 beforeRequest: [
59 (options, error, retryCount) => {
60 requestMetricsEnd = requestMetrics.startTimer()
61 // starter = process.hrtime()
62 console.log('beforeRequest')
63 }
64 ],
65 beforeRetry: [
66 (options, error, retryCount) => {
67 requestMetricsEnd = requestMetrics.startTimer()
68 // starter = process.hrtime()
69 console.log('beforeRetry', {retryCount}) //, error)
70 }
71 ],
72 beforeError: [
73 error => {
74 requestMetricsEnd(getResponseLabels(error))
75 // finisher = process.hrtime(starter)
76 // allTimings.push(finisher)
77 console.log('beforeError') //, error)
78 return error
79 }
80 ]
81 }
82})
83
84const fire = async () => {
85 const apiMetricsEnd = apiMetrics.startTimer()
86 // const totalRepsonseStart = process.hrtime()
87 try {
88 const response = await client.get(options)
89 apiMetricsEnd(getResponseLabels(response))
90 const {body, retryCount} = response
91 console.log({body, retryCount})
92 } catch (e) {
93 apiMetricsEnd(getResponseLabels(e))
94 console.log('e', e ? e.body : 'no body')
95 }
96
97 // const totalRepsonseElapsed = process.hrtime(totalRepsonseStart)
98 // allTimings.forEach(timing => {
99 // console.log(convertHrtime(timing))
100 // })
101 // console.log('totes', convertHrtime(totalRepsonseElapsed))
102 console.log(prometheus.register.metrics())
103}
104
105fire()