Comments (5)
The root of this issue seems to be the annotation serialization model that we've chosen.
- To marshal or unmarshal an event, it must be registered.
- Registration must occur because there are various interfaces (
TimespanEvent
,TimestampedEvent
,ImportantEvent
) which direct information about the event type (e.g. forTimespanEvent
it tells us which struct field exactly is the start and end times of the span). - Without registration we cannot know the timespan times, important fields, etc.
The stringent requirement on event registration means that custom event types don't render properly when running the standalone appdash
command (as shown above).
We could formalize the annotation (read: struct field) name for both the starting and ending times of a timespan (or the timestamp for a timestamped event) but this would effectively render the TimespanEvent
interface a bit redundant (and users of it would soon find their events not rendering in the standalone appdash
app).
The least imposing option I can think of is to keep the redundant TimespanEvent
interface for legacy code, and encourage the use of a new type Timespan struct{StartTime, EndTime time.Time}
structure (which would always have identical StartTime
and EndTime
annotation names, so the standalone app could always unmarshal at least a Timespan
event for rendering).
from appdash.
The idea I had, without any idea of how possible or difficult it would be to implement: Tie the registration of the event to a collector, and send a "schema serialization" to the collector to inform it how a particularly named event is structured.
In our app we currently call appdash.RegisterEvent()
in init()
, but there's no reason why we couldn't call it after we create a collector.
from appdash.
@joeshaw Right, I think your solution would work. It does require a change to the core annotation serialization model, however.
I'm not opposed to changing the annotation serialization model, and it's required in order to fix this, but it does need some good thought on what the best approach is (how does Zipkin/Dapper handle it? what other approaches are there? etc), I just want to ensure the solution is not rushed 😄
For now I think the best approach is to require modification of the appdash
executable's source code, which should be as simple as:
import "my/event/declarations"
(At least until I'm certain of a proper solution to this issue).
from appdash.
@slimsag yep, not trying to rush you on this. We've worked around this in the meantime exactly as you suggest. Thanks!
from appdash.
The proper solution here is probably the opentracing
API which does not use custom event types but rather standard methods for adding tags/etc to spans.
from appdash.
Related Issues (20)
- slack link
- HTTPS support
- Can't figure how to mount traceapp to anything other than "/" HOT 1
- Remove unmaintained influxdbstore backend
- Python examples: An Issue and a question HOT 2
- Appdash Tracing in microseconds precision HOT 1
- build error "use of internal package not allowed" with thrid-part store implementation.
- webapp example panic: interface conversion: interface {} is nil, not appdash.SpanID HOT 5
- appdash client support java and other language?
- only can store in memory?support redis or mysql in future?
- Slack link in README is not valid HOT 1
- Travis build failing on latest Go version HOT 2
- deadlinks HOT 5
- why Annotations type is slice , not map[string][]byte? HOT 4
- a Span storage specification issue HOT 3
- Setting up appdash in Go, not seeing traces HOT 1
- Dependency Dashboard
- 503 Service Temporarily Unavailable about sourcegraph.com HOT 3
- Error highlighting HOT 2
- Regression in change from fmt to strconv HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from appdash.