Can a Service Outage be Fraud?

November 19th, 2014

I’m in Germany for the always excellent Open Source Monitoring Conference (review coming) and I wanted to have data for my mobile phone. At the airport we stopped at a Relay store and bought an Ortel SIM card for 20 euros (well, €19.90). Since Ronny was with me I just let him activate the card (the process was mainly in German) and we got on the train to Nürnberg.

During the two hour trip I must have exhausted the small amount of default data that came with it, and thus began an odyssey that took over 24 hours to get resolved.

First we tried to go to the “Mein Ortel” site, but it was down.

Then, we downloaded the “Mein Ortel” app from Google Play. It loaded but we could never authenticate.

This lasted for hours.

After we had arrived at the hotel, we noticed that the website, at least, had become available. But at any point when we tried to purchase more time we’d get still another error.

They do have a customer service number, but they charge €0.49 per minute to use it. In desperation we called it but they had closed for the day, so there was no resolution to be had on the first night.

The next day we tried, unsuccessfully, to get the web site and the app to work. Finally Ronny called, was put on hold (!) and then told that they were having issues with their payment system. Why a total lack in the ability to accept payments would require so much time to determine that you would have to be put on hold is beyond me, but my guess is that Ortel just wanted to ratchet up a few more euros from me.

At lunch we went in search of another provider. We found a Base store that sold Ortel and Blau SIMs, but we were told that Blau may take up to 24 hours to activate. We then found a Vodafone store but they wanted €45 for a SIM. In the end, we decided to buy an Ortel voucher (the SIM was activated at least) for €15 and with the help of the lady at the Base store managed to get the credit applied, and I should have service for the reminder of my stay.

My question is: isn’t is fraud to take money for a service and then fail to deliver that service? I’m only here for three days and I was without data on my phone for more than a third of the trip, all due to the fact that Ortel can’t be bothered to implement network management.

I’m doubly surprised that this happened in Germany, since they tend to be more strict on these things than most countries.

Yeah, I know “first world problems”, but as someone who is in this country with nearly 300 other professionals to discuss monitoring it seems like Ortel could benefit from sending some people to this conference. As commercial network-services become even more prevalent and important, I do expect to see the implementation of fines for outages.

Anyway, if you are ever offered the option to get mobile service from Ortel, run the other way.

Net Neutrality and Enron

November 11th, 2014

Yesterday, Senator Ted Cruz from Texas tweeted the following:

It was in response to President Obama making a statement in support of Net Neutrality by wanting to classify broadband Internet as a utility. Despite the fact that it was about six years too late, I had to roll my eyes because I knew that if Obama came out in support of something, the Republicans would feel required to take the opposite stance.

Treating broadband as a utility is a no-brainer. It is basically an extension of the telephone system which has done very well as a utility, and it has become so important to most people and businesses that creating barriers to access would be a huge step backward. The OpenNMS Group would not have been able to survive in a world where we would have to pay to compete for access at levels that HP and IBM can afford, and there are thousands of other small businesses and entrepreneurs in the same boat.

But Senator Cruz and others have received a large amount of money from cable companies, especially Comcast, who stand to benefit the most if they can charge different rates to different content providers. This isn’t an new argument, Jon Stewart discussed it on his show back in 2006:

But now with Obama’s stance and the newly minted Republican-controlled Congress wanting to flex its muscles, expect it to become a hotter topic.

I was made aware of this through The Oatmeal, and while Matt Inman is dead on as usual, his language and analogies are, hmm, shall we say, not often for gentle ears. So while he makes his point he is basically preaching to the choir, and we need to frame the discussion in something that may actually shame the Republicans into doing the right thing.

Then I remembered Enron.

If broadband is not a utility, but seems like one, what could happen if we put control into private hands? That’s exactly what California did in 1996 by partially deregulating its energy market. This let to an energy crisis in 2000 and 2001, that according to Wikipedia was “caused by market manipulations, illegal shutdowns of pipelines by the Texas energy consortium Enron, and capped retail electricity prices”.

It’s eerie that Comcast’s shutdown of Netflix traffic is so similar to “illegal shutdowns of pipelines”. It’s already happening.

So, when faced with irrational statements like those from Senator Cruz, remain calm and just point out “so you think we need an Enron of the Internet?”. Keep saying it, over and over again.

Perhaps they’ll get the message.

Test Driven Development

November 7th, 2014

One of the things that bothers me a lot about the software industry is this idea that proprietary software is somehow safer and better written than open source software. Perhaps it is because a lot of people still view software as “magic” and since you can’t see the code, is must be more “magical”. Or perhaps is it because people assume that something you have to pay for must be better than something that is free.

I’ve worked for and with a number of proprietary software companies, so I’ve seen how the sausage is made, and in some cases you don’t want to know. Don’t get me wrong, I’ve seen well managed commercial software companies that produce solid code because in the long run solid code is better and costs less, but I’ve also seen the opposite done simply to get a product to market quickly.

With open source, at least if you expect contribution, you have to produce code that is readable. It also helps if it is well written since good programmers respect and like working with other good programmers. It’s out there for everyone to see, and that puts extra demands on its quality.

In the interest of making great code, many years ago we switched to the Spring framework which had the benefit that we could start writing software tests. This test driven development is one reason OpenNMS is able to stay so stable with lots of code changes and a small test team.

What’s funny is that we’ve talked to at least two other companies who started implementing test driven development but then dropped it because it was too hard. It wasn’t easy for us, either, but as of this writing we run 5496 tests every time something changes in the main OpenNMS application, and that doesn’t include all of the other branches and projects such as Newts. We use the Bamboo product from Atlassian to manage the tests so I want to take this opportunity to thank them for supporting us.

OpenNMS 14 contained some of the biggest code changes in the platform’s history but so far it has been one of the smoothest releases yet. While most of that was due to to the great team of developers we have, part of it was due to the transparency that the open source process encourages.

Commercial software could learn a thing or two from it.

OpenNMS 14 Timelines

November 5th, 2014

I often talk about how OpenNMS is a platform and not just an application, and with the release of OpenNMS 14 there is a lovely way to demonstrate the difference.

There is a cool little GUI improvement that I believe was started at last year’s Dev Jam which provides graphical timeline for outages. So now instead of having to look at the outage table on a node’s page, you can just look at the service availability section.

Cool, huh? What you may not realize is that instead of hardcoding the feature the timelines are rendered through ReST. The GUI sends a ReST request to the server which returns the graphic information. Let’s examine the “Update” service above.

The query

/opennms/rest/timeline/image/46/172.20.1.38/Update/1415119622/1415206023/480

results in:

with a format of:

/opennms/rest/timeline/image/{nodeId}/{ipAddress}/{serviceName}/{start}/{end}/{width}

Even the header graphic is done the same way

/opennms/rest/timeline/header/1415119622/1415206023/480

results in:

with a format of:

/opennms/rest/timeline/header/{start}/{end}/{width}

Of course, assembling all of that can be tedious, so this query:

/opennms/rest/timeline/html/46/172.20.1.38/Update/1415119622/1415206023/480

with a format of:

/opennms/rest/timeline/html/{nodeId}/{ipAddress}/{serviceName}/{start}/{end}/{width}

will create the whole HTML code needed to render the timeline:

document.write('<img src="/opennms/rest/timeline/image/46/172.20.1.38/Update/1415119622/1415206023/480" usemap="#46-172.20.1.38-Update">
<map name="46-172.20.1.38-Update"><area shape="rect" coords="128,2,412,18" href="/opennms/outage/detail.htm?id=153740" alt="Id 153740"
title="2014-11-04 18:13:24.628"><area shape="rect" coords="-111,2,-26,18" href="/opennms/outage/detail.htm?id=153724" alt="Id 153724" 
title="2014-11-04 06:12:56.322"><area shape="rect" coords="-2051,2,-1925,18" href="/opennms/outage/detail.htm?id=153348" alt="Id 153348" 
title="2014-10-31 06:13:11.421"><area shape="rect" coords="-2291,2,-2291,18" href="/opennms/outage/detail.htm?id=153289" alt="Id 153289" 
title="2014-10-30 18:11:33.006"><area shape="rect" coords="-2691,2,-2397,18" href="/opennms/outage/detail.htm?id=153258" alt="Id 153258" 
title="2014-10-29 22:13:27.086"><area shape="rect" coords="-2871,2,-2871,18" href="/opennms/outage/detail.htm?id=153235" alt="Id 153235" 
title="2014-10-29 13:12:29.747"><area shape="rect" coords="-3071,2,-2884,18" href="/opennms/outage/detail.htm?id=153137" alt="Id 153137" 
title="2014-10-29 03:12:13.887"><area shape="rect" coords="-3232,2,-3231,18" href="/opennms/outage/detail.htm?id=153132" alt="Id 153132" 
title="2014-10-28 19:11:02.873"><area shape="rect" coords="-3690,2,-3670,18" href="/opennms/outage/detail.htm?id=153086" alt="Id 153086" 
title="2014-10-27 20:14:11.949"><area shape="rect" coords="-6431,2,-6431,18" href="/opennms/outage/detail.htm?id=152786" alt="Id 152786" 
title="2014-10-22 03:11:05.149"></map>');

If a service isn’t monitored, such as the StrafePing service in the above example, that empty timeline is also available:

/opennms/rest/timeline/empty/1415119622/1415206023/480

with a format of:

/opennms/rest/timeline/empty/{start}/{end}/{width}

Pretty cool, huh? A lot of OpenNMS is accessible by ReST and the wiki page covers most of the options. Thus you can use the data via the OpenNMS GUI or integrate it with one of your own.

Announcing OpenNMS 14 and Newts 1.0

November 4th, 2014

It is with great pleasure that I can announce the release of OpenNMS 14. Yup, you heard right, OpenNMS *fourteen*.

It’s been more than 12 years since OpenNMS 1.0 so we’ve decided to pull a Java and drop the “1.” from the version numbers. Also, we are doing away with stable and development branches. The Master branch has been replaced with the develop branch, which will be much more stable than development releases have been in the past, and we’ll name the next major stable release 15, followed by 16, etc. Do expect bug fix point releases as the in past, but the plan is to release more major releases per year than just one.

A good overview of all the new features in 14 can be found here:

https://github.com/OpenNMS/opennms/blob/release-14.0.0/WHATSNEW.md

The development team has been working almost non-stop over the last two months to make OpenNMS 14 the best and most tested version yet. A lot of things has been added, such as new topology and geographic maps, and some big things have been made better, such as linkd. Plus, oodles of little bugs have finally been closed making the whole release seem more polished and easier to use.

Today we also released Newts 1.0, the first release in a new time series data storage library. Published under the Apache License, this technology is built on Cassandra and is aimed at meeting Big Data and Internet of Things needs by providing fast, hugely scalable and redundant data storage. You can find out more about this technology here:

http://newts.io

While not yet integrated with OpenNMS, the 1.0 release is the first step in the process. Users will have the option to replace the JRobin/RRDtool storage strategies with Newts. Since Newts stores raw data, there will be a number of options for post-processing and graphing that data that I know a number of you will find useful. Whether your data needs are simple or complex, Newts represents a way to meet them.

Feel free to check out both projects. OpenNMS 14 should be in both the yum and apt repos, and as usual I welcome feedback as to what you think about it.