I’ve used GlassWire a few times over the past few years but always uninstalled it because I couldn’t make sense of the graph. Something seemed not-quite-right about it. I looked into this further and have realized that the way data is presented on the graph appears to be meaningless.

First I’d like to show a case where the graph is almost correct. In the current version when I select the “5 Minutes” interval the top-left summary value changes to a “megabytes per second” reading. I can see that a new point is being added to the graph every second and the height of that point equates to the total amount of data transferred over the last second. This is a bandwidth graph and is quite useful. This graph would actually be correct if it were a bar graph. Since GlassWire is sampling total data transfer at discrete intervals it’s meaningless to show a continuous line (spline) between points. If it were a bar graph each bar would clearly show the amount of data transferred over that bar’s width.

Here’s an example of me downloading a Linux ISO. This graph shows I am downloading at my network connection’s full capacity (~4MB/s) and, line graph issue aside, is a meaningful graph:

Note how the “5 Minutes” graph doesn’t re-scale itself when you expand or contract the width of the window. This is because this graph doesn’t aggregate samples. This is a good thing.

Moving on to the other graphs, such as the “3 Hours” graph:

This is where the logic behind the graph really deteriorates into a mess. The “3 Hour” graph, and all larger scale graphs are completely meaningless. Here’s why:

Firstly, these should be bar graphs rather than line graphs as discussed earlier. For now, we’ll just imagine that they are bar graphs so we can reason more clearly about the errors in these graphs.

GlassWire appears to aggregate individual samples to generate this graph. This means the meaningful megabytes-per-second samples that you can see in the “5 Minute” graph are added together to show an indeterminate “megabytes-per-arbitrary-unit-of-time” reading. There is no visual indication as to how much time each sample corresponds to. Looking at the top-left corner of the graph you’ll see the Y axis maximum set to an arbitrary number of megabytes or gigabytes without any unit of time component. This further conflates the graph and should actually show the time interval used to aggregate the data. For example, instead of “10GB” it should show “10GB/30 Minutes” (depending on the width of the window and the time period)

In it’s current state, the “Month”, “Week”, “24 Hours”, and “3 Hours” graphs have no meaning whatsoever. The “5 Minutes” graph is incorrect (should be a bar graph) but is otherwise good.

There are several things GlassWire needs to change to make these graphs useful:

- Replace the line graph with a bar graph.
- Dispose of the aggregation logic in the “Month” to “3 Hours” views. Instead, average the 1-second samples into time periods large enough so that you show a reasonable number of bars (this would be based on the window’s width and the time interval)
- Always show “megabytes-per-second” in the top left corner
- Add a feature to allow a user to select a time period in the graph, and have GlassWire sum each bandwidth sample to get a total data usage number (in megabytes or gigabytes)

My only guess as to why GlassWire works this way is because the graphs are more visually appealing when they have large variations in height.

I also want to raise issue with some quotes from this blog post which tried to explain how the GlassWire graph works: https://blog.glasswire.com/2016/05/09/understanding-glasswires-graph-and-scaling-how-much-data-are-you-using-on-your-pc/

“This example shows that over the past 5 minutes you have downloaded 20 KB worth of data.”

Incorrect. There is actually no way to tell how much data you have downloaded over the entire time period using the GlassWire graph. Looking at the three peaks in that graph I would estimate about 50KB to 80KB of data transfer in the last 5 minutes.

“There is also a bandwidth label at the bottom left of the window. Bandwidth means the number of bytes divided to the time of transfer. So if the 15 KB file was downloaded during 10 seconds, the bandwidth will be 15 KB per second.”

This is only a bandwidth label in the “5 Minutes” graph. In other graphs it becomes a meaningless sum of data transferred over some not-disclosed time period which is a function of the width of the window and the overall time period.

I’ll also add that the math is wrong, if a 15KB file were downloaded over 10 seconds the bandwidth would be 1.5KB per second.

“With regards to our graph this will mean that we have to summarize all the transferred bytes during 3 hours…”

This entire paragraph seems like a non-sequitur and refers to a 3 hour interval when the rest of the post and all screeenshots refer to a 5 minute interval.

The rest of the post refers to scale recalculation without really understanding that the height of the graph is a function of the largest aggregated bandwidth sum which in turn is a function of sustained bandwidth use and of the time period selected, which, as discussed earlier, is meaningless.

It’s a bit of a concern when GlassWire’s own staff don’t understand how the graph works. GlassWire could be a great application with a few minor tweaks to the graph which I have itemized in this post. Until GlassWire makes those changes it appears to be favoring form over function.

In closing, I’d recommend searching google images for “bandwidth graph”. You’ll find they all follow the advice I’ve given in this post. Here’s one example: http://i.imgur.com/L7psKLA.png

I am making this longwinded because I like GlassWire and I want it to be sucessful.