Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit f98ec08

Browse files
vigneshtdevmayurkale22
authored andcommitted
Add trace params (#311)
* Add Trace Parameters limits * Improve null checking, naming conventions..Address CR comments. * Fix Typos. * Improve null checking, naming conventions..Address CR comments. Fix Typos. * Import constants from TraceParamsBuilder * Add unit test for verifying max parameter values.Address CR comments
1 parent 2a13a77 commit f98ec08

File tree

5 files changed

+157
-4
lines changed

5 files changed

+157
-4
lines changed

packages/opencensus-core/src/trace/config/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ export interface TracerConfig {
3737
logger?: Logger;
3838
/** A propagation instance */
3939
propagation?: Propagation;
40+
/** Trace Parameters */
41+
traceParams?: TraceParams;
4042
}
4143

4244
/** Available configuration options. */
@@ -70,4 +72,19 @@ export interface TracingConfig {
7072
logger?: Logger;
7173
}
7274

75+
/** Global configuration of trace service */
76+
export interface TraceParams {
77+
/**
78+
* numberOfAnnontationEventsPerSpan is number of annotation events per
79+
* span
80+
*/
81+
numberOfAnnontationEventsPerSpan?: number;
82+
/** numberOfMessageEventsPerSpan is number of message events per span */
83+
numberOfMessageEventsPerSpan?: number;
84+
/** numberOfAttributesPerSpan is number of attributes per span */
85+
numberOfAttributesPerSpan?: number;
86+
/** numberOfLinksPerSpan is number of links per span */
87+
numberOfLinksPerSpan?: number;
88+
}
89+
7390
export type Config = TracingConfig&TracerConfig&BufferConfig;

packages/opencensus-core/src/trace/model/tracer.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ import * as logger from '../../common/console-logger';
1818
import * as loggerTypes from '../../common/types';
1919
import * as cls from '../../internal/cls';
2020
import * as configTypes from '../config/types';
21+
import {TraceParams} from '../config/types';
2122
import {Propagation} from '../propagation/types';
22-
import {SamplerBuilder} from '../sampler/sampler';
23+
import * as samplerConstants from '../sampler/sampler';
24+
import {SamplerBuilder, TraceParamsBuilder} from '../sampler/sampler';
2325
import * as samplerTypes from '../sampler/types';
26+
2427
import {RootSpan} from './root-span';
2528
import * as types from './types';
2629

@@ -42,11 +45,20 @@ export class CoreTracer implements types.Tracer {
4245
private endedTraces: types.RootSpan[] = [];
4346
/** Bit to represent whether trace is sampled or not. */
4447
private readonly IS_SAMPLED = 0x1;
48+
private readonly DEFAULT_TRACE_PARAMS: TraceParams = {
49+
numberOfAnnontationEventsPerSpan:
50+
samplerConstants.DEFAULT_SPAN_MAX_NUM_ANNOTATIONS,
51+
numberOfAttributesPerSpan: samplerConstants.DEFAULT_SPAN_MAX_NUM_ATTRIBUTES,
52+
numberOfLinksPerSpan: samplerConstants.DEFAULT_SPAN_MAX_NUM_LINKS,
53+
numberOfMessageEventsPerSpan: samplerConstants
54+
.DEFAULT_SPAN_MAX_NUM_MESSAGE_EVENTS
55+
};
4556
/** A sampler used to make sample decisions */
4657
sampler: samplerTypes.Sampler;
4758
/** A configuration for starting the tracer */
4859
logger: loggerTypes.Logger = logger.logger();
49-
60+
/** A configuration object for trace parameters */
61+
activeTraceParams: TraceParams = this.DEFAULT_TRACE_PARAMS;
5062

5163
/** Constructs a new TraceImpl instance. */
5264
constructor() {
@@ -81,6 +93,18 @@ export class CoreTracer implements types.Tracer {
8193
this.config = config;
8294
this.logger = this.config.logger || logger.logger();
8395
this.sampler = SamplerBuilder.getSampler(config.samplingRate);
96+
if (config.traceParams) {
97+
this.activeTraceParams.numberOfAnnontationEventsPerSpan =
98+
TraceParamsBuilder.getNumberOfAnnotationEventsPerSpan(
99+
config.traceParams);
100+
this.activeTraceParams.numberOfAttributesPerSpan =
101+
TraceParamsBuilder.getNumberOfAttributesPerSpan(config.traceParams);
102+
this.activeTraceParams.numberOfMessageEventsPerSpan =
103+
TraceParamsBuilder.getNumberOfMessageEventsPerSpan(
104+
config.traceParams);
105+
this.activeTraceParams.numberOfLinksPerSpan =
106+
TraceParamsBuilder.getNumberOfLinksPerSpan(config.traceParams);
107+
}
84108
return this;
85109
}
86110

packages/opencensus-core/src/trace/sampler/sampler.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import {TraceParams} from '../config/types';
18+
1719
import {Sampler} from './types';
1820

1921
// We use 52-bits as our max number because it remains a javascript "safe
@@ -97,3 +99,44 @@ export class SamplerBuilder {
9799
return new ProbabilitySampler(probability);
98100
}
99101
}
102+
103+
104+
/** Default Limit for Annotations per span */
105+
export const DEFAULT_SPAN_MAX_NUM_ANNOTATIONS = 32;
106+
/** Default limit for Message events per span */
107+
export const DEFAULT_SPAN_MAX_NUM_MESSAGE_EVENTS = 128;
108+
/** Default limit for Attributes per span */
109+
export const DEFAULT_SPAN_MAX_NUM_ATTRIBUTES = 32;
110+
/** Default limit for Links per span */
111+
export const DEFAULT_SPAN_MAX_NUM_LINKS = 32;
112+
113+
/** Builder Class of TraceParams */
114+
export class TraceParamsBuilder {
115+
static getNumberOfAnnotationEventsPerSpan(traceParameters: TraceParams):
116+
number {
117+
return traceParameters.numberOfAnnontationEventsPerSpan >
118+
DEFAULT_SPAN_MAX_NUM_ANNOTATIONS ?
119+
DEFAULT_SPAN_MAX_NUM_ANNOTATIONS :
120+
traceParameters.numberOfAnnontationEventsPerSpan;
121+
}
122+
123+
static getNumberOfAttributesPerSpan(traceParameters: TraceParams): number {
124+
return traceParameters.numberOfAttributesPerSpan >
125+
DEFAULT_SPAN_MAX_NUM_ATTRIBUTES ?
126+
DEFAULT_SPAN_MAX_NUM_ATTRIBUTES :
127+
traceParameters.numberOfAttributesPerSpan;
128+
}
129+
130+
static getNumberOfMessageEventsPerSpan(traceParameters: TraceParams): number {
131+
return traceParameters.numberOfMessageEventsPerSpan >
132+
DEFAULT_SPAN_MAX_NUM_MESSAGE_EVENTS ?
133+
DEFAULT_SPAN_MAX_NUM_MESSAGE_EVENTS :
134+
traceParameters.numberOfMessageEventsPerSpan;
135+
}
136+
137+
static getNumberOfLinksPerSpan(traceParameters: TraceParams): number {
138+
return traceParameters.numberOfLinksPerSpan > DEFAULT_SPAN_MAX_NUM_LINKS ?
139+
DEFAULT_SPAN_MAX_NUM_LINKS :
140+
traceParameters.numberOfLinksPerSpan;
141+
}
142+
}

packages/opencensus-core/test/test-sampler.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@
1515
*/
1616

1717
import * as assert from 'assert';
18+
19+
import {TraceParams} from '../src/trace/config/types';
1820
import {RootSpan} from '../src/trace/model/root-span';
1921
import {CoreTracer} from '../src/trace/model/tracer';
20-
import {SamplerBuilder} from '../src/trace/sampler/sampler';
22+
import {SamplerBuilder, TraceParamsBuilder} from '../src/trace/sampler/sampler';
2123

2224
const tracer = new CoreTracer();
2325

26+
const traceParameters: TraceParams = {
27+
numberOfAnnontationEventsPerSpan: 12,
28+
numberOfAttributesPerSpan: 10,
29+
numberOfLinksPerSpan: 7,
30+
numberOfMessageEventsPerSpan: 5
31+
};
32+
2433
describe('Sampler', () => {
2534
/**
2635
* Should return true
@@ -100,4 +109,31 @@ describe('Sampler', () => {
100109
});
101110
});
102111
});
103-
});
112+
describe('getNumberOfAnnotationEventsPerSpan', () => {
113+
it('should return 12', () => {
114+
assert.equal(
115+
TraceParamsBuilder.getNumberOfAnnotationEventsPerSpan(
116+
traceParameters),
117+
12);
118+
});
119+
});
120+
describe('getNumberOfMessageEventsPerSpan', () => {
121+
it('should return 5', () => {
122+
assert.equal(
123+
TraceParamsBuilder.getNumberOfMessageEventsPerSpan(traceParameters),
124+
5);
125+
});
126+
});
127+
describe('getNumberOfAttributesPerSpan', () => {
128+
it('should return 10', () => {
129+
assert.equal(
130+
TraceParamsBuilder.getNumberOfAttributesPerSpan(traceParameters), 10);
131+
});
132+
});
133+
describe('getNumberOfLinksPerSpan', () => {
134+
it('should return 7', () => {
135+
assert.equal(
136+
TraceParamsBuilder.getNumberOfLinksPerSpan(traceParameters), 7);
137+
});
138+
});
139+
});

packages/opencensus-core/test/test-tracer.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
import * as assert from 'assert';
1818
import * as uuid from 'uuid';
19+
1920
import {randomSpanId} from '../src/internal/util';
2021
import {TracerConfig} from '../src/trace/config/types';
22+
import {TraceParams} from '../src/trace/config/types';
2123
import {RootSpan} from '../src/trace/model/root-span';
2224
import {Span} from '../src/trace/model/span';
2325
import {CoreTracer} from '../src/trace/model/tracer';
@@ -237,6 +239,37 @@ describe('Tracer', () => {
237239
assert.notEqual(rootSpan.parentSpanId, spanContextPropagated.spanId);
238240
});
239241
});
242+
243+
it('should create a tracer with default TraceParams when no parameters are specified upon initialisation',
244+
() => {
245+
const tracer = new CoreTracer();
246+
tracer.start(defaultConfig);
247+
assert.equal(
248+
tracer.activeTraceParams.numberOfAnnontationEventsPerSpan, 32);
249+
assert.equal(tracer.activeTraceParams.numberOfAttributesPerSpan, 32);
250+
assert.equal(tracer.activeTraceParams.numberOfLinksPerSpan, 32);
251+
assert.equal(
252+
tracer.activeTraceParams.numberOfMessageEventsPerSpan, 128);
253+
});
254+
255+
it('should create a tracer with default TraceParams when parameters with values higher than maximum limit are specified upon initialisation',
256+
() => {
257+
const traceParametersWithHigherThanMaximumValues: TraceParams = {
258+
numberOfAnnontationEventsPerSpan: 50,
259+
numberOfMessageEventsPerSpan: 200,
260+
numberOfAttributesPerSpan: 37,
261+
numberOfLinksPerSpan: 45
262+
};
263+
defaultConfig.traceParams = traceParametersWithHigherThanMaximumValues;
264+
const tracer = new CoreTracer();
265+
tracer.start(defaultConfig);
266+
assert.equal(
267+
tracer.activeTraceParams.numberOfAnnontationEventsPerSpan, 32);
268+
assert.equal(tracer.activeTraceParams.numberOfAttributesPerSpan, 32);
269+
assert.equal(tracer.activeTraceParams.numberOfLinksPerSpan, 32);
270+
assert.equal(
271+
tracer.activeTraceParams.numberOfMessageEventsPerSpan, 128);
272+
});
240273
});
241274

242275

0 commit comments

Comments
 (0)