opentelemetry-js/examples/mysql/server.js

131 lines
3.4 KiB
JavaScript

'use strict';
const opentelemetry = require('@opentelemetry/core');
const config = require('./setup');
/**
* The trace instance needs to be initialized first, if you want to enable
* automatic tracing for built-in plugins (HTTP and MySQL in this case).
*/
config.setupTracerAndExporters('http-mysql-server-service');
const mysql = require('mysql');
const http = require('http');
const tracer = opentelemetry.getTracer('example-mysql-http-server');
const pool = mysql.createPool({
host : 'localhost',
user : 'root',
password : 'secret',
database : 'my_db',
});
const connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'secret',
database : 'my_db',
});
const cluster = mysql.createPoolCluster();
cluster.add({
host : 'localhost',
user : 'root',
password : 'secret',
database : 'my_db',
})
/** Starts a HTTP server that receives requests on sample server port. */
function startServer (port) {
// Creates a server
const server = http.createServer(handleRequest);
// Starts the server
server.listen(port, err => {
if (err) {
throw err;
}
console.log(`Node HTTP listening on ${port}`);
});
}
/** A function which handles requests and send response. */
function handleRequest (request, response) {
const currentSpan = tracer.getCurrentSpan();
// display traceid in the terminal
const {traceId} = currentSpan.context();
console.log(`traceid: ${traceId}`);
console.log(`Jaeger URL: http://localhost:16686/trace/${traceId}`)
console.log(`Zipkin URL: http://localhost:9411/zipkin/traces/${traceId}`)
try {
let body = [];
request.on('error', err => console.log(err));
request.on('data', chunk => body.push(chunk));
request.on('end', () => {
if (request.url === "/connection/query") {
handleConnectionQuery(response);
} else if (request.url === "/pool/query") {
handlePoolQuery(response);
} else if (request.url === "/cluster/query") {
handleClusterQuery(response);
} else {
handleNotFound(response);
}
});
} catch (err) {
console.log(err);
}
}
startServer(8080);
function handlePoolQuery(response) {
const query = "SELECT 1 + 1 as pool_solution";
pool.getConnection((err, conn) => {
conn.query(query, (err, results, fields) => {
tracer.getCurrentSpan().addEvent("results");
if (err) {
console.log("Error code:", err.code);
response.end(err.message);
}
else {
response.end(`${query}: ${results[0].pool_solution}`);
}
});
})
}
function handleConnectionQuery(response) {
const query = "SELECT 1 + 1 as solution";
connection.query(query, (err, results, fields) => {
if (err) {
console.log("Error code:", err.code);
response.end(err.message);
}
else {
response.end(`${query}: ${results[0].solution}`);
}
});
}
function handleClusterQuery(response) {
const query = "SELECT 1 + 1 as cluster_solution";
cluster.getConnection((err, conn) => {
conn.query(query, (err, results, fields) => {
tracer.getCurrentSpan().addEvent("results");
if (err) {
console.log("Error code:", err.code);
response.end(err.message);
}
else {
response.end(`${query}: ${results[0].cluster_solution}`);
}
});
})
}
function handleNotFound(response) {
response.end("not found");
}