tracing tweaks
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
const instana = require('instana-nodejs-sensor');
|
||||
const redis = require('redis');
|
||||
const request = require('request');
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
// init tracing
|
||||
// MUST be done before loading anything else!
|
||||
instana({
|
||||
tracing: {
|
||||
enabled: true
|
||||
}
|
||||
});
|
||||
|
||||
const redis = require('redis');
|
||||
const request = require('request');
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
var redisConnected = false;
|
||||
|
||||
const app = express();
|
||||
@@ -66,6 +67,24 @@ app.delete('/cart/:id', (req, res) => {
|
||||
});
|
||||
});
|
||||
|
||||
// rename cart i.e. at login
|
||||
app.get('/rename/:from/:to', (req, res) => {
|
||||
redisClient.get(req.params.from, (err, data) => {
|
||||
if(err) {
|
||||
console.log('ERROR', err);
|
||||
res.status(500).send(err);
|
||||
} else {
|
||||
if(data == null) {
|
||||
res.status(404).send('cart not found');
|
||||
} else {
|
||||
var cart = JSON.parse(data);
|
||||
saveCart(req.params.to, cart);
|
||||
res.json(cart);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// update/create cart
|
||||
app.get('/add/:id/:sku/:qty', (req, res) => {
|
||||
// check quantity
|
||||
|
@@ -1,16 +1,17 @@
|
||||
const instana = require('instana-nodejs-sensor');
|
||||
const mongoClient = require('mongodb').MongoClient;
|
||||
const mongoObjectID = require('mongodb').ObjectID;
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
// init tracing
|
||||
// MUST be done before loading anything else!
|
||||
instana({
|
||||
tracing: {
|
||||
enabled: true
|
||||
}
|
||||
});
|
||||
|
||||
const mongoClient = require('mongodb').MongoClient;
|
||||
const mongoObjectID = require('mongodb').ObjectID;
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
// MongoDB
|
||||
var db;
|
||||
var collection;
|
||||
|
@@ -8,7 +8,7 @@ import (
|
||||
"github.com/streadway/amqp"
|
||||
"github.com/instana/golang-sensor"
|
||||
ot "github.com/opentracing/opentracing-go"
|
||||
// ext "github.com/opentracing/opentracing-go/ext"
|
||||
ext "github.com/opentracing/opentracing-go/ext"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -77,6 +77,33 @@ func failOnError(err error, msg string) {
|
||||
}
|
||||
}
|
||||
|
||||
func createSpan(headers map[string]interface{}) {
|
||||
// headers is map[string]interface{}
|
||||
// carrier is map[string]string
|
||||
carrier := make(ot.TextMapCarrier)
|
||||
// convert by copying k, v
|
||||
for k, v := range headers {
|
||||
carrier[k] = v.(string)
|
||||
}
|
||||
|
||||
// opentracing
|
||||
var span ot.Span
|
||||
tracer := ot.GlobalTracer()
|
||||
spanContext, err := tracer.Extract(ot.HTTPHeaders, carrier)
|
||||
if err == nil {
|
||||
log.Println("Creating span")
|
||||
// create span
|
||||
span = tracer.StartSpan("dispatch", ot.ChildOf(spanContext), ext.SpanKindConsumer)
|
||||
ext.MessageBusDestination.Set(span, "orders")
|
||||
ext.Component.Set(span, "dispatch")
|
||||
defer span.Finish()
|
||||
time.Sleep(42 * time.Millisecond)
|
||||
} else {
|
||||
log.Println("Failed to get span context")
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func main() {
|
||||
// Instana tracing
|
||||
@@ -106,6 +133,8 @@ func main() {
|
||||
|
||||
for d := range msgs {
|
||||
log.Printf("Order %s\n", d.Body)
|
||||
log.Printf("Headers %v\n", d.Headers)
|
||||
go createSpan(d.Headers)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
@@ -4,6 +4,8 @@ import time
|
||||
import logging
|
||||
import uuid
|
||||
import requests
|
||||
import opentracing as ot
|
||||
import opentracing.ext.tags as tags
|
||||
from flask import Flask
|
||||
from flask import request
|
||||
from flask import jsonify
|
||||
@@ -36,7 +38,26 @@ def pay(id):
|
||||
|
||||
def queueOrder(order):
|
||||
app.logger.info('queue order')
|
||||
publisher.publish(order)
|
||||
# RabbitMQ is not currently traced automatically
|
||||
# opentracing tracer is automatically set to Instana tracer
|
||||
# start a span
|
||||
context = ot.tracer.current_context()
|
||||
span = ot.tracer.start_span(operation_name='queue-order',
|
||||
child_of=ot.tracer.current_context(),
|
||||
tags={
|
||||
tags.SPAN_KIND: 'producer',
|
||||
tags.COMPONENT: 'payment',
|
||||
'message_bus.destination': 'orders'
|
||||
}
|
||||
)
|
||||
|
||||
headers = {}
|
||||
ot.tracer.inject(span.context, ot.Format.HTTP_HEADERS, headers)
|
||||
app.logger.info('msg headers {}'.format(headers))
|
||||
|
||||
publisher.publish(order, headers)
|
||||
|
||||
span.finish()
|
||||
|
||||
# RabbitMQ
|
||||
publisher = Publisher(app.logger)
|
||||
|
@@ -24,22 +24,23 @@ class Publisher:
|
||||
self._channel.exchange_declare(exchange=self.EXCHANGE, exchange_type=self.TYPE, durable=True)
|
||||
self._logger.info('connected to broker')
|
||||
|
||||
def _publish(self, msg):
|
||||
def _publish(self, msg, headers):
|
||||
self._channel.basic_publish(exchange=self.EXCHANGE,
|
||||
routing_key=self.ROUTING_KEY,
|
||||
properties=pika.BasicProperties(headers=headers),
|
||||
body=json.dumps(msg).encode())
|
||||
self._logger.info('message sent')
|
||||
|
||||
#Publish msg, reconnecting if necessary.
|
||||
def publish(self, msg):
|
||||
def publish(self, msg, headers):
|
||||
if self._channel is None:
|
||||
self._connect()
|
||||
try:
|
||||
self._publish(msg)
|
||||
self._publish(msg, headers)
|
||||
except pika.exceptions.ConnectionClosed:
|
||||
self._logger.info('reconnecting to queue')
|
||||
self._connect()
|
||||
self._publish(msg)
|
||||
self._publish(msg, headers)
|
||||
|
||||
def close(self):
|
||||
if self._conn and self._conn.is_open:
|
||||
|
@@ -1,17 +1,18 @@
|
||||
const instana = require('instana-nodejs-sensor');
|
||||
const mongoClient = require('mongodb').MongoClient;
|
||||
const mongoObjectID = require('mongodb').ObjectID;
|
||||
const redis = require('redis');
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
// init tracing
|
||||
// MUST be done before loading anything else!
|
||||
instana({
|
||||
tracing: {
|
||||
enabled: true
|
||||
}
|
||||
});
|
||||
|
||||
const mongoClient = require('mongodb').MongoClient;
|
||||
const mongoObjectID = require('mongodb').ObjectID;
|
||||
const redis = require('redis');
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require('express');
|
||||
|
||||
// MongoDB
|
||||
var db;
|
||||
var collection;
|
||||
@@ -39,11 +40,14 @@ app.get('/health', (req, res) => {
|
||||
// use REDIS INCR to track anonymous users
|
||||
app.get('/uniqueid', (req, res) => {
|
||||
// get number from Redis
|
||||
redisClient.incr('user', (err, r) => {
|
||||
redisClient.incr('anonymous-counter', (err, r) => {
|
||||
if(!err) {
|
||||
res.json({
|
||||
uuid: 'anonymous-' + r
|
||||
});
|
||||
} else {
|
||||
console.log('ERROR', err);
|
||||
res.status(500).send(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user