普罗米修斯Python clientvs普罗米修斯Node.js client
我将Prometheus与基于烧瓶的应用程序以及Node.js/快递基于应用程序。下面是它们的代码。你知道吗
我对这里的普罗米修斯建筑有点困惑。为什么普罗米修斯在与Flask集成时又启动了一个web服务器,而在与Flask集成时却重用了express服务器Node.js/快递应用程序。请查找下面两个集成的代码。你知道吗
基于烧瓶的应用:
import graphene
from apis.graphql.schema.queries \
import Query
from flask import Flask
from flask_graphql import GraphQLView
import time
from prometheus_client import Counter, Histogram, start_http_server
FLASK_REQUEST_LATENCY = Histogram('flask_request_latency_seconds', 'Flask Request Latency', ['method', 'endpoint'])
FLASK_REQUEST_COUNT = Counter('flask_request_count', 'Flask Request Count', ['method', 'endpoint', 'http_status'])
def get_options():
"""Function to get the options passed via command line."""
from cmdline.parse import OptionParser
parser = OptionParser()
# Add the port option with default value 5000
parser.add_option(
'-port',
required=False,
type=int,
default=5002,
help='Port on which to listen for incoming requests. '
'Defaults to 5000.'
)
opts, args = parser.parse_args()
return opts
def before_request():
request.start_time = time.time()
def after_request(response):
request_latency = time.time() - request.start_time
FLASK_REQUEST_LATENCY.labels(request.method, request.path).observe(request_latency)
FLASK_REQUEST_COUNT.labels(request.method, request.path, response.status_code).inc()
return response
def monitor(app, port, addr=''):
app.before_request(before_request)
app.after_request(after_request)
start_http_server(port, addr)
if __name__ == '__main__':
# Get the command line options.
options = get_options()
# Create an instance of the Flask class for the web app.
app = Flask(__name__)
# Adds the endpoint /graphql.
app.add_url_rule(
'/graphql',
view_func=GraphQLView.as_view(
'graphql', schema=graphene.Schema(Query), graphiql=True
)
)
monitor(app, options.port)
app.run(
host = '0.0.0.0',
port = 5000,
threaded=True
)
基于节点的应用程序:
const express = require('express')
const bodyParser = require('body-parser')
const redis = require("redis")
const process = require('process')
const version = require('./version.json')
const redis_url = process.env.REDIS_URL || 'redis://localhost:6379'
const client = redis.createClient(redis_url)
const app = module.exports = express()
const Prometheus = require('prom-client')
const metricsInterval = Prometheus.collectDefaultMetrics()
const metrics = (req, res) => {
res.set('Content-Type', Prometheus.register.contentType)
res.end(Prometheus.register.metrics())
}
const gamingRequests = new Prometheus.Counter({
name: 'gaming_requests_total',
help: 'number of requests',
labelNames: ['route', 'method']
})
const middleware = (req, res, next) => {
gamingRequests.inc({route: req.path, method: req.method}, 1, Date.now())
next()
}
app.use(bodyParser.json())
app.use(middleware)
app.get('/metrics', metrics)
app.get('/version', (req, res) => {
res.setHeader('content-type', 'application/javascript')
res.send(JSON.stringify({version: version.version}))
})
app.get('/score/:userId', (req, res) => {
client.get(
`score:${req.params.userId}`,
(err, result) => {
res.setHeader('content-type', 'application/javascript')
if (err || !result) {
return res.send(JSON.stringify({score: 0}))
}
return res.send(result)
}
)
})
app.listen(8080, '0.0.0.0' , () => {
console.log(`Gaming App started on 0.0.0.0:8080`)
})
您是否注意到“启动http服务器(端口,地址)”以及应用程序运行()如果是烧瓶?但我们没有两个网络服务器以防Node.js/快递应用程序。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐