I was challenged during my recruitment process, if I can build an internal telephone billing solution. I said yes and I immediately explained to recruitment board how we can design this can of system. They told me that it is a Cisco-based call manager (CUCM). It was easy for me to explain, as I’m a telecoms engineer and I love writing software application. Once I was hired, I started this project. I tried to locate where I could find the log files (also known as CDR for Call Details Records). I found the location and I tried to understand the format and the content. I found in a given file, where the callee number, called number, call duration, are call date time, directory number of the callee and called and so on. As it was an urgent project, I decided to use Python language to build a rich console-based application that meets the needs, and with scalability in mind. I used around 1200 lines of Python codes to build this tool. I used MongoDB for data storing. It can provide structured details by month, by year for each employee, for each directory number, for each group of employees and so on.
The management team and my service department appreciated the tool and we found that it may help us for taking decision about our PSTN or SIP providers. It is some part useful for Business Intelligence (BI) actions. I understand maybe why Cisco didn’t sell this kind of billing application as everyone with a strong programming skills can build his own from scratch. Maybe in the future I will share about the design and the code regarding this billing tool. :]
Again let me share another great story. Our department was in charge of building a platform that can send some information to a certain number of people. At each three to five minutes, we must receive a many files and each one contains specific information. Our task was to write a program that runs continuously and sends each new file to a file server in a secure fashion. Since the department knows that i’m strong in programming and i love it, the assigned me this project. I discussed with the technical team who hosts the server, and we agreed on using SFTP (Secure File Transfer Protocol) for security purposes. I used Python to write a console based application that watchs a special folder and transfers each new file which arrives inside. I also added a logging feature to specify if the attempt to setup the connection, to transfer and move a file, have succeeded or not, and the reason why it failed, in case we have a failure. We made some tests, and everyone appreciated my work. I will blog on the design and code of this small tool in a separate article. :]
Before we conclude, allow me to share an event where my programming skill came into play. As the responsible of large distributed networks, I got some complaints from employees based on our remotes sites. They are experiencing some latency while using business applications. As these hundreds of users located on different remotes sites are not IT people, it was difficult to ask them to perform some basics commands such Ping or Tracert. In the same time, I cannot get to all these sites as they are too far from my office. For troubleshooting purposes, we needed to gather for each remote office, Ping and Tracert commands output from some end hosts to the data center. Also, we were in need to have this information three times per day at specific business hours. I found that a small Batch script could help for this purpose. Then, i wrote this script and sent it to these users by email; so that they can execute it by just double-click. The script performs the commands, saves the output to a file with a structured name and sends it to a remote shared folder. It worked well and this helped us found the root cause and solve the problem.
I have more programming related stories to share but, I would like to stop here and definitively conclude. For examples, many of these small successes coding actions allowed acting as advisor or architect on some large development projects or join software development team and so on. Click here to read the last Part 4 which is my summary :]