131 lines
3.4 KiB
JavaScript
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");
|
|
}
|
|
|