Our web application provides an easy and safe way for our healthcare partners to redirect patients of lower priority in order to reduce wait time, risk and costs in emergency rooms. Our process involves following a proven algorithm, where at each step you “leave” the process if the criteria aren’t matched.
We are in production since only a few weeks, so this is our quick first try of an overview dashboard :D. Data bellow has been anonymized with generic names and values, but enough to give you an idea!
As you can see, we can find the following informations (based on last 7 days data):
Total requests received
Amount of appointments taken
Availability (Synthetics healthcheck success rate)
Custom version of a funnel for our algorithm
Call duration for specific schedule loads
SLA and Request satisfaction
Details on some queries
We use our Synthetics healthcheck call’s success rate to display a gauge here.
SELECT percentage(count(*), WHERE result = 'SUCCESS') FROM SyntheticCheck WHERE monitorName = 'Healthcheck - Prod' SINCE 7 days ago
Useful to bring the value into a dashboard without having to check it elsewhere!
2. Algorithm funnel
This result is similar to a “conversion rate” in usual store sites, but applied to our reality. Since we do not use the Browser or Mobile features, we made our own homemade version of a funnel graph based on server requests at each steps.
SELECT count(*) FROM Transaction facet cases( WHERE(name = 'WebTransaction/***/***Step1/**') as 'Step 1 - ***', WHERE(name = 'WebTransaction/***/***Step2/**:someId' AND `request.headers.referer` LIKE '%/***Step1/**') as 'Step 2 - ***', WHERE(name = 'WebTransaction/***/***Step3/**:someId' AND `request.headers.referer` LIKE '%/***/***Step2/%') as 'Step 3 - ***', WHERE(name = 'WebTransaction/***/***Step4/**:someId' AND `request.headers.referer` LIKE '%/***/***Step3/%') as 'Step 4 - Appointment confirmation' ) SINCE 7 days ago
As you can see, we make sure that at each step, the call count only consider ones made (referred) from previous step.
-> Same principle (with same WHERE statement) is applied in the widget bellow to represent the % of users remaining after each step, similar to this:
SELECT filter(count(*), WHERE(name = 'WebTransaction/***/***Step2/**:someId' AND `request.headers.referer` LIKE '%/***Step1/**')) / filter(count(*), WHERE(name = 'WebTransaction/***/***Step1/**')) * 100 as '% Step 2',
3. Important transactions duration percentiles
In order to monitor closely each schedule type’s load times (a heavy and important call in our API), we display the duration with this query:
SELECT percentile(duration, 50, 90) FROM Transaction WHERE `request.uri` LIKE '/scheduleTypeA/%' SINCE 7 days ago FACET `request.uri`
We can then view each variants and its matching values. The table filter function then allows us to see worst ones first. We actually caught a bug for a specific schedule load last week, as we could see high duration spikes for one of them!
TIP: As used in the previous request, the
LIKE operator with a
% at the end of URIs ensure it will match any query string parameters. A cool trick!
4. SLA and Apdex preview
As we display only this particular dashboard on a TV near our work area, we wanted to bring back the SLA and request satisfaction based on our Apdex value in our overview.
This query was highly inspired by a few posts in the Explorers hub! I don’t have the sources at hand, but we built it based on our findings here, so Kudos to you guys!
SELECT count(*) / 1000 AS 'Requests thousands', average(duration) * 1000 AS 'Resp. time ms', apdex(duration, 0.5), percentage(count(*), WHERE duration <= 0.5) AS '% Satisfied', percentage(count(*), WHERE duration > 0.5 AND duration <= 2) AS '% Tolerating', percentage(count(*), WHERE duration > 2) AS '% Frustrated' FROM Transaction WHERE appName = 'OurAppName-prod' SINCE 7 days ago
As you can see, our Apdex value is still the default one (500ms), which is hardcoded in this query. If someone figures out how to pull it from our actual apdex value instead, let us know :)!
We only just started exploring Insights. It’s a pretty cool module! We proved to our stakeholders that we could quickly mix performance, “technical” metrics with real business observations, which is great! Thank you NewRelic!
We will enhance our dashboards in the future.
PS: Hopefully there will be clear and affordable pricing options soon, in order to explore with a bit more than ~8 days data retention!