These are chat archives for exceptionless/Discuss

14th
Jan 2016
Blake Niemyjski
@niemyjski
Jan 14 2016 00:12
@frankebersoll we just made sessions on the client so much easier
Frank Ebersoll
@frankebersoll
Jan 14 2016 05:58
@niemyjski i will have a look
Blake Niemyjski
@niemyjski
Jan 14 2016 15:35
I need to commit it
Blake Niemyjski
@niemyjski
Jan 14 2016 18:11
@frankebersoll exceptionless/Exceptionless.Net@1d5cfb4
I’m not sure if you have any pending commits but I’m going to pull down the js client and start working on it :)
Blake Niemyjski
@niemyjski
Jan 14 2016 18:48
I pushed some minor changes and reverted yoru commit because we ended up deleting everything that you had written in the .net client.
I saw you had a single change for last reference manager in there
Blake Niemyjski
@niemyjski
Jan 14 2016 19:02
@frankebersoll any chance you could work on local storage with fallback to in memory?
would make a huge difference
Frank Ebersoll
@frankebersoll
Jan 14 2016 20:28
i’m gonna do that.
i start with node and then try to figure out the web
i would always try to do it this way around :-)
Blake Niemyjski
@niemyjski
Jan 14 2016 20:31
committing now
can you review my code and let me know if there is going to be any issues with node
pushed
Frank Ebersoll
@frankebersoll
Jan 14 2016 20:32
pulling
Blake Niemyjski
@niemyjski
Jan 14 2016 20:37
pushed again
we need to figure out a good way to set that as a default option
thinking maybe a configuration defaults flag for the browser
if set, we call that
configuration.defaults.enableSessions = true;
do you like that idea?
Frank Ebersoll
@frankebersoll
Jan 14 2016 20:53
don’t we have two different entry points for node and for the browser?
can’t we just set it there?
Blake Niemyjski
@niemyjski
Jan 14 2016 20:53
yeah
well if you look at the entry point it’s setting defaults for all created clients
guess we are making some pretty big assumptions about the default client there
guess we just set it on that??
Frank Ebersoll
@frankebersoll
Jan 14 2016 20:55
most people will use the default client anyways?
Blake Niemyjski
@niemyjski
Jan 14 2016 20:56
yeah
I’d say almost every use case
Eric J. Smith
@ejsmith
Jan 14 2016 20:57
the reason we allow multiple clients is because people have requested to be able to send events to multiple projects.
Blake Niemyjski
@niemyjski
Jan 14 2016 20:58
be nice if we just said no to that on the js client but then there are some scenarios where it would suck
like embedding it in a third party lib and getting your own error reports / logs but who would ever do that
Eric J. Smith
@ejsmith
Jan 14 2016 20:59
don’t remember why we dont allow sending to multiple projects from a single client instance.
the event post api doesn’t allow more than one project at a time.
Blake Niemyjski
@niemyjski
Jan 14 2016 20:59
because each batch is for a sinle project
Eric J. Smith
@ejsmith
Jan 14 2016 20:59
yep
Frank Ebersoll
@frankebersoll
Jan 14 2016 20:59
i really like the multiple clients thing. i don’t like singletons at all
Eric J. Smith
@ejsmith
Jan 14 2016 20:59
makes you wonder if supporting that would make people’s lives easier.
yeah, I don’t like singletons either.
like the idea of being able to create multiple with different settings.
Frank Ebersoll
@frankebersoll
Jan 14 2016 21:00
yeah, but all should be configured the same from the beginning
Blake Niemyjski
@niemyjski
Jan 14 2016 21:00
yep
Frank Ebersoll
@frankebersoll
Jan 14 2016 21:00
so we just need to set the defaults different for java / node
Eric J. Smith
@ejsmith
Jan 14 2016 21:00
if you support multiple client instances, why would they all be configured the same?
Blake Niemyjski
@niemyjski
Jan 14 2016 21:01
so maybe we have a flag?? on configuration settings
Frank Ebersoll
@frankebersoll
Jan 14 2016 21:01
did i say java? sorry for that
Blake Niemyjski
@niemyjski
Jan 14 2016 21:01
lol
@ejsmith we want a common default instance
so everytime you do new Client() you get the same base
Frank Ebersoll
@frankebersoll
Jan 14 2016 21:12
where is the heartbeat interval defined?
is this fixed on the server?
Blake Niemyjski
@niemyjski
Jan 14 2016 21:21
fixed
30 seconds
Frank Ebersoll
@frankebersoll
Jan 14 2016 21:22
and the timeout? 60 seconds?
Blake Niemyjski
@niemyjski
Jan 14 2016 21:24
no timeout
it resets everytime an event is submitted
as long as that page is active they are sending event
get latest :)
Blake Niemyjski
@niemyjski
Jan 14 2016 21:29
I need to do testing now
Blake Niemyjski
@niemyjski
Jan 14 2016 22:13
@ejsmith @frankebersoll what should a page view be
a feature usage event with metrics on it? value set to page load time in ms?
guess we just want sessions right now that’s a different feature :)
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:15
did we get some kind of consent about refactoring the session id into the reference thing and build page views on top of that?
or will page views be another kind of special event?
Eric J. Smith
@ejsmith
Jan 14 2016 22:16
yeah, we want to go that route. Need to talk with @niemyjski some more and work out the final details.
I will have time tonight to work with him.
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:18
i find it a bit difficult to get an outlook on the planned features in a „vertical“ kind of view
we have all those incident lists in the different projects
but at the end, a feature is something that needs to be implemented in the UI, the server and most of the clients
Blake Niemyjski
@niemyjski
Jan 14 2016 22:20
yeah
kinda working on just sessions right now
Eric J. Smith
@ejsmith
Jan 14 2016 22:20
yeah, they have stuff where you can view cross projects.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:20
main goal
Eric J. Smith
@ejsmith
Jan 14 2016 22:21
but we don’t really do a good job of planning a roadmap anyway. :-(
Blake Niemyjski
@niemyjski
Jan 14 2016 22:21
btw, with that note. elastic search just contacted me they are going to work with me next week (during a weeknight) upgrading our whole project to elastic 2.1
Eric J. Smith
@ejsmith
Jan 14 2016 22:21
dang
that is pretty sweet
Blake Niemyjski
@niemyjski
Jan 14 2016 22:22
they want to screen cast it and see our pain points
Eric J. Smith
@ejsmith
Jan 14 2016 22:22
like the C# code and everything?
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:22
will that be recorded?
Blake Niemyjski
@niemyjski
Jan 14 2016 22:22
yeah
maybe hehe
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:22
great news
Blake Niemyjski
@niemyjski
Jan 14 2016 22:22
I’m sure they wouldn’t mind others watching
Eric J. Smith
@ejsmith
Jan 14 2016 22:23
seems like that would be a good sized undertaking.
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:23
i would mind watching
Eric J. Smith
@ejsmith
Jan 14 2016 22:23
I guess there isn’t really too much that would be an issue for us, but it’s the migration that will be a PITA.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:24
yeah
that’s the biggest thing
that’s why everything is going into a branch
eh, guess we need to move our repository stuff into a different repo / project
need to rev that independently because I will commit that
Eric J. Smith
@ejsmith
Jan 14 2016 22:25
yeah, I would be very happy with just having them migrate us.
would also be very interested to hear what they think about our indexing strategy.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:26
yeah
I’m kinda excited I think I have this heartbeat stuff done :)
Eric J. Smith
@ejsmith
Jan 14 2016 22:27
cool
Blake Niemyjski
@niemyjski
Jan 14 2016 22:27
testing the js client now
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:33
@niemyjski while i’m at it: should I make the generic „IStorage<T> into a non-generic version?
i can’t see that we use T anywhere - it’s bound to Object somehow.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:36
ah
it made it really nice to inject into a place and get nice intellisense
also storage implementations that use different types can have a perf hit.. but kinda outside of the scope of this
thoughts?
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:38
i just figured that IStorage is only used by configuration.ts
so, well, i leave it as is and try using it at first :-)
Blake Niemyjski
@niemyjski
Jan 14 2016 22:39
ok
if it’s a pain we can get rid of it
just thoiught it was nice having typing'
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:40
yes, i just thought it wasn’t used anywhere.
it isn’t because the storage itself isn’t used. makes sense.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:42
really?
why would it be there if it wasn't
sorry looking into something else right now
Frank Ebersoll
@frankebersoll
Jan 14 2016 22:43
the queue uses it. vscode „find references“ is broken.
Blake Niemyjski
@niemyjski
Jan 14 2016 22:47
:(
yeah I think queue is the only thing that uses it
Blake Niemyjski
@niemyjski
Jan 14 2016 23:01
@ejsmith I just looked into an issue with @srijken https://github.com/exceptionless/Exceptionless.Net/blob/71b7ff5cf27180a79046bf6b0e53e85b6437a89d/Source/Tests/Plugins/PluginTests.cs#L209-L234 Is there a reason we don’t implement getHashCode or equals for inner error model?
wonder if we should just look at the exceptions stack trace hashcode
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:03
@niemyjski did I tell you the trick with ReSharper > Generate Equality Members?
i think we talked about something similar. i always use that as boilerplate for equality members, as it gets the hashcode calculation right
Blake Niemyjski
@niemyjski
Jan 14 2016 23:04
hmm
I remember someone telling me about that but I forgot
hehe
Blake Niemyjski
@niemyjski
Jan 14 2016 23:11
fudge
this interval isn’t being cleared correctly
doooh
got bitten by lexical this
Blake Niemyjski
@niemyjski
Jan 14 2016 23:19
@frankebersoll I’m running the node express sample app
Example app listening at http://::3000
[info] Exceptionless: Enqueuing event: ex-q-2016-01-14T23:19:08.275Z-26832602660864 type=log
[error] Exceptionless: Error running plugin 'RequestInfoPlugin': Unexpected token u. Discarding Event.
[error] Exceptionless: Error running plugin 'RequestInfoPlugin': Unexpected token u. Discarding Event.
[error] Exceptionless: Error running plugin 'RequestInfoPlugin': Unexpected token u. Discarding Event.
[info] Exceptionless: Processing queue...
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:20
huh?
unexpected token u.
Blake Niemyjski
@niemyjski
Jan 14 2016 23:21
yeah
all my events are being discarded
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:21
no stack trace?
Blake Niemyjski
@niemyjski
Jan 14 2016 23:23
nope
Eric J. Smith
@ejsmith
Jan 14 2016 23:25
so the dupe checking isn’t working, eh?
Blake Niemyjski
@niemyjski
Jan 14 2016 23:25
nope
only works if you pass the instance in twice
@frankebersoll can you reproduce? I have the latest version of node installed.
I can’t seem to hit a break point :frowning:
Eric J. Smith
@ejsmith
Jan 14 2016 23:26
I think that was the idea.
we were just trying to make sure that the exact same instance wasn’t getting sent twice.
we don’t stack at the client side.
if the error is actually happening multiple times then we want to report it multiple times.
so we don’t want value equality.
we want reference equality.
Blake Niemyjski
@niemyjski
Jan 14 2016 23:27
we are doing value equality in the js client
and it helps big time
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:28
@ejsmith we are doing stack equality, iirc
Blake Niemyjski
@niemyjski
Jan 14 2016 23:28
yeah I think that it can’t hurt...
esp within that small amount of time
Eric J. Smith
@ejsmith
Jan 14 2016 23:28
it can hurt in that you won’t truly know how many times a specific exception is being thrown.
how big is the time window?
Sander Rijken
@srijken
Jan 14 2016 23:28
2 seconds
at least in .NET it is
Eric J. Smith
@ejsmith
Jan 14 2016 23:29
so I could be throwing this 1 exception a crapload of times… but I guess if I am getting 1 every 2 seconds then I will get the idea that it’s happening a lot, eh?
the dupe check really was only supposed to be making sure that 2 different ways of capturing errors weren’t sending the same exact error… but I guess we can go with the value equality approach.
Sander Rijken
@srijken
Jan 14 2016 23:30
we should also look at the test cases of .Javascript and .Net, and verify that the behave similarly?
Eric J. Smith
@ejsmith
Jan 14 2016 23:30
yeah
Sander Rijken
@srijken
Jan 14 2016 23:30
the thing with the dupe check on values is that it’s a sliding window
Eric J. Smith
@ejsmith
Jan 14 2016 23:30
yeah, true
Sander Rijken
@srijken
Jan 14 2016 23:30
so if it keeps happening, you’ll only see one
Eric J. Smith
@ejsmith
Jan 14 2016 23:30
so it will kill it.
yeah, so we can’t be doing value equality or we will never get any errors.
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:32
so we do reference equality instead?
Sander Rijken
@srijken
Jan 14 2016 23:32
once you go that way, you’ll quickly get into something that looks a lot like stacking
the way of value compares that is
Eric J. Smith
@ejsmith
Jan 14 2016 23:33
yeah and we don’t want that logic happening on the client side.
Sander Rijken
@srijken
Jan 14 2016 23:35
in some cases in my own project I do :P but in general you don’t want that
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:35
i will need to scroll several months up to find the discussion we had about that :-)
Sander Rijken
@srijken
Jan 14 2016 23:36
on one hand I want to know that something happens a lot.. like 100 times a second or so.. on the other hand, I don’t care so much if it’s 100 or 200 in that case :)
Blake Niemyjski
@niemyjski
Jan 14 2016 23:37
that’s not true
Sander Rijken
@srijken
Jan 14 2016 23:37
what isn’t?
Blake Niemyjski
@niemyjski
Jan 14 2016 23:37
the .net client looks at the first hash code and doesn’t update the sliding window
the last time I looked at it that’s what it did
Sander Rijken
@srijken
Jan 14 2016 23:37
oh ok
Blake Niemyjski
@niemyjski
Jan 14 2016 23:37
so it should only do every 2 seconds
Sander Rijken
@srijken
Jan 14 2016 23:37
right
Blake Niemyjski
@niemyjski
Jan 14 2016 23:37
but I’ve had an angular bug get thrown 1.5 million times
Sander Rijken
@srijken
Jan 14 2016 23:38
so if the same thing keeps happening, it’s throttled to one every 2 seconds?
Blake Niemyjski
@niemyjski
Jan 14 2016 23:38
and I had that dedupe run in the same scenario after we had it and it was like 50k
so it works
            // make sure that we don't process the same error multiple times within 2 seconds.
            if (_recentlyProcessedErrors.Any(s => s.Item1 == hashCode && s.Item2 >= repeatWindow)) {
                context.Log.FormattedInfo(typeof(ExceptionlessClient), "Ignoring duplicate error event: hash={0}", hashCode);
                context.Cancel = true;
                return;
            }
Sander Rijken
@srijken
Jan 14 2016 23:38
yeah
Blake Niemyjski
@niemyjski
Jan 14 2016 23:39
so we just need equality
but it shouldn’t check data
maybe type + code + stack trace only
want it to be insanely fast
So the heartbeat stuff is tested on .net and js
but we have a node error with errors
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:40
Eric J. Smith
@ejsmith
Jan 14 2016 23:40
I am cool with doing an exact value match of the error and only sending 1 every 2 seconds.
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:40
Found it.
Eric J. Smith
@ejsmith
Jan 14 2016 23:41
I think 1 every 2 seconds gets the point across.
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:41
I did the Deduplication plugin as a port from .net
but in .net, it used GetHashCode on the StackTrace object
Eric J. Smith
@ejsmith
Jan 14 2016 23:41
should add something to the model that makes it easy to do a value equality.
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:41
while GetHashCode wasn’t overridden
Eric J. Smith
@ejsmith
Jan 14 2016 23:42
which is ref equality I believe.
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:42
yes, and i talked about it with blake, and we agreed upon „stack“ equality for the javascript client.
that’s why i ended up with error.stack_trace > json > gethashcode
still, we have a sliding window.
that might to be reworked then
Eric J. Smith
@ejsmith
Jan 14 2016 23:45
yeah, we definitely want to avoid where angular sends us 1.5 million bajillion events over the course of a couple days.
right @niemyjski ? :-)
Blake Niemyjski
@niemyjski
Jan 14 2016 23:57
so.. i think i found my first red flag with my fiancee.. not sure how i feel
Eric J. Smith
@ejsmith
Jan 14 2016 23:57
she doesn’t like kringles?
Blake Niemyjski
@niemyjski
Jan 14 2016 23:58
she took some things of mine and got rid of them when i told her not to
and she laughed
granyted they were still really small but it meant something to me
Frank Ebersoll
@frankebersoll
Jan 14 2016 23:59
what were they? would we laugh, too?