You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Tracking Traffic at Your Site

Tracking Traffic at Your Site

As a member of Team Macromedia I respond to a lot of questions posted on the Macromedia Forums ( http://webforums.macromedia.com/coldfusion).

My responses often contain sample code, and I realized that many questions arose over and over again. So rather than repeatedly typing the same code snippets, I created a small Web site ( http://members.evolt.org/dshadovi) to hold them. Now I can simply point to the relevant page when I respond to a question.

Being a nosy guy, I wanted to know how the site was being used. Yes, there are tools that do a wonderful job of presenting this information, such as Analog and WebTrends. But they require access to the Web server logs, which I don't have. Anyway, I wanted to roll my own. That's the fun of CF!

My first cut at tracking traffic was to use session management and CFMAIL. I set up Application.cfm to send me a message whenever a new session was started. It worked, but sometimes the mail was overwhelming. The biggest problem with this technique, though, was that it made it hard to perform analysis. I couldn't easily determine which page was getting the most hits, or how many visitors use Netscape.

The right technique, and the one I'll describe in detail, is to record the site traffic in a database and use CF's graphing capabilities to display it.

Recording the Site Traffic
Using MySQL, I created a single table to record information on each hit. Listing 1 shows the structure of that table. As you can see, each record contains the page visited, the visitor's IP address and browser (the user agent), and the date and time of the visit.

A record is inserted into that database table each time the site is hit. Listing 2 shows the code to do this. This code belongs in Application.cfm.

Note that the INSERT statement doesn't include the time of the hit. When no value is specified for a field of type TIMESTAMP, which cannot be null, MySQL automatically inserts the current date and time. I could have passed the value #CreateODBC DateTime(Now())#, but it's more efficient to let the database take care of it.

You'll also see that I've massaged the name of the page a bit. For all of the pages on my site, CGI.SCRIPT_ NAME starts with "dshadovi/", so I strip this off. I also strip off the ".cfm" extension, since the name of the page, not the extension, is what's important for the graphical display of the traffic.

Don't chide me for not using CFQUERYPARAM. I do use it, but I omitted it here in the interest of readability.

Displaying the Site Traffic
Now that the pieces are in place to record the site traffic, we're ready to write the code to graphically display it. Listing 3 is a complete CFML template that does exactly that. Figure 1 is a screenshot of this template in action; you can also see it live at http://members.evolt.org/dshadovi/traffic.cfm.

Exception Handling

An exception is an error that occurs at runtime. Most if not all programming languages offer a way to handle exceptions. The goal of this handling is to minimize the damage done by the exception. Sometimes it's possible to repair the problem or to work around it. If not, the application can at least provide a detailed error message.

ColdFusion provides CFTRY/CFCATCH, modeled on C's try/catch statements. Using this construct, the ColdFusion Server tries to execute a designated block of code, and if it catches any exceptions it executes another designated block of code.

I use CFTRY/CFCATCH in Listings 2 and 3. Let's take a closer look.

Listing 2 shows a snippet of code in Application.cfm, which inserts a record into the database. The record contains information about the current page visit. Now, the main goal of my Web site is to provide helpful code to other programmers. Tracking visits to the site is only a minor goal, mostly to satisfy my curiosity. I certainly wouldn't want problems with this minor goal to interfere with my major goal.

What kinds of problems might happen? Well, the database server could go down, or the database's transaction log may be full. Either of these would make it impossible to insert a record, but there's no reason why that should render my site unusable. So I put the CFQUERY tag in a CFTRY block. If there are any runtime errors, the CFCATCH code block is executed. The CFCATCH block here is empty because there's no remedial action to take. If a record can't be inserted, that's okay. Execution continues on with whatever code follows the entire CFTRY block.

In Listing 2 the protected code block, a CFQUERY tag, did under-the-covers work. Not so for Listing 3, in which the protected code block is a CFGRAPH tag. There is surely a user impact if the graph isn't displayed. So in this case the CFCATCH block isn't empty. Rather, it lets the user know there should have been a graph, and points to a possible cause of the problem. (Okay, I should also have code here to automatically e-mail the details of the problem to the server administrator, or to log the problem.)

I've shown here two uses of CFTRY/CFCATCH. Beyond this, CFTRY's TYPE attribute lets you take different actions based on the type of exception. The ColdFusion Server also provides CFCATCH variables that contain details of the exception. And CFTHROW gives you the power to declare that an exception has taken place.

Using CFTRY/CFCATCH to handle exceptions lets you compartmentalize your code, leading to more robust applications.

The code uses CFGRAPH, introduced in CF5. Those of you using earlier versions of CF are not out of luck, though. You laggards can use the old bar chart Java graphlet that used to come with CF. Do a Google search on "About ColdFusion Graphlets" for more information, or contact me. At the other end of the spectrum ColdFusion MX offers CFCHART in place of CFGRAPH, but that should be a straightforward change.

Each bar in the bar graph represents a page, and the bar's height indicates the number of hits on that page. CFGRAPH's URLColumn attribute provides a drill-down capability when using the Flash format. I've set it up so that clicking on a bar will lead you to that bar's page.

You may notice that although I record each visitor's IP address, I don't display it anywhere. That's because I record it for hacker control, not for a simple view of the site traffic.

A programmer's work is never done (especially when he's got a paying client), so here are some thoughts for future enhancements:

  • I could parse the user agent and display pie charts showing what operating systems and browsers are being used.
  • Recording the CGI.HTTP_REFERRER would let me see what search engines and keywords are being used to reach my site. That might be useful in deciding what META keywords to use in my templates.
  • Another idea is to make my own ersatz Web server log file, which I could analyze offline using one of the tools I mentioned earlier. I'd use CFQUERY to get the traffic data and CFFILE to write it to a file.
  • Finally, I mentioned that I'm using CFGRAPH's drill-down capability to lead to the page represented by the clicked-on bar. It might be more interesting to drill down to more detailed traffic statistics for that page.

    Let me close with thanks to evolt.org, a community for Web developers, for hosting my site.

  • More Stories By David Shadovitz

    David Shadovitz is a Senior Software Engineer at XonTech, Inc., in Los Angeles and a member of Team Macromedia.

    Comments (1)

    Share your thoughts on this story.

    Add your comment
    You must be signed in to add a comment. Sign-in | Register

    In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.

    @ThingsExpo Stories
    Donna Yasay, President of HomeGrid Forum, today discussed with a panel of technology peers how certification programs are at the forefront of interoperability, and the answer for vendors looking to keep up with today's growing industry for smart home innovation. "To ensure multi-vendor interoperability, accredited industry certification programs should be used for every product to provide credibility and quality assurance for retail and carrier based customers looking to add ever increasing num...
    In an era of historic innovation fueled by unprecedented access to data and technology, the low cost and risk of entering new markets has leveled the playing field for business. Today, any ambitious innovator can easily introduce a new application or product that can reinvent business models and transform the client experience. In their Day 2 Keynote at 19th Cloud Expo, Mercer Rowe, IBM Vice President of Strategic Alliances, and Raejeanne Skillern, Intel Vice President of Data Center Group and ...
    @ThingsExpo has been named the Top 5 Most Influential M2M Brand by Onalytica in the ‘Machine to Machine: Top 100 Influencers and Brands.' Onalytica analyzed the online debate on M2M by looking at over 85,000 tweets to provide the most influential individuals and brands that drive the discussion. According to Onalytica the "analysis showed a very engaged community with a lot of interactive tweets. The M2M discussion seems to be more fragmented and driven by some of the major brands present in the...
    Machine Learning helps make complex systems more efficient. By applying advanced Machine Learning techniques such as Cognitive Fingerprinting, wind project operators can utilize these tools to learn from collected data, detect regular patterns, and optimize their own operations. In his session at 18th Cloud Expo, Stuart Gillen, Director of Business Development at SparkCognition, discussed how research has demonstrated the value of Machine Learning in delivering next generation analytics to impr...
    Data is the fuel that drives the machine learning algorithmic engines and ultimately provides the business value. In his session at Cloud Expo, Ed Featherston, a director and senior enterprise architect at Collaborative Consulting, will discuss the key considerations around quality, volume, timeliness, and pedigree that must be dealt with in order to properly fuel that engine.
    What happens when the different parts of a vehicle become smarter than the vehicle itself? As we move toward the era of smart everything, hundreds of entities in a vehicle that communicate with each other, the vehicle and external systems create a need for identity orchestration so that all entities work as a conglomerate. Much like an orchestra without a conductor, without the ability to secure, control, and connect the link between a vehicle’s head unit, devices, and systems and to manage the ...
    Virgil consists of an open-source encryption library, which implements Cryptographic Message Syntax (CMS) and Elliptic Curve Integrated Encryption Scheme (ECIES) (including RSA schema), a Key Management API, and a cloud-based Key Management Service (Virgil Keys). The Virgil Keys Service consists of a public key service and a private key escrow service. 

    Web Real-Time Communication APIs have quickly revolutionized what browsers are capable of. In addition to video and audio streams, we can now bi-directionally send arbitrary data over WebRTC's PeerConnection Data Channels. With the advent of Progressive Web Apps and new hardware APIs such as WebBluetooh and WebUSB, we can finally enable users to stitch together the Internet of Things directly from their browsers while communicating privately and securely in a decentralized way.
    Amazon has gradually rolled out parts of its IoT offerings, but these are just the tip of the iceberg. In addition to optimizing their backend AWS offerings, Amazon is laying the ground work to be a major force in IoT - especially in the connected home and office. In his session at @ThingsExpo, Chris Kocher, founder and managing director of Grey Heron, explained how Amazon is extending its reach to become a major force in IoT by building on its dominant cloud IoT platform, its Dash Button strat...
    Two weeks ago (November 3-5), I attended the Cloud Expo Silicon Valley as a speaker, where I presented on the security and privacy due diligence requirements for cloud solutions. Cloud security is a topical issue for every CIO, CISO, and technology buyer. Decision-makers are always looking for insights on how to mitigate the security risks of implementing and using cloud solutions. Based on the presentation topics covered at the conference, as well as the general discussions heard between sessi...
    For basic one-to-one voice or video calling solutions, WebRTC has proven to be a very powerful technology. Although WebRTC’s core functionality is to provide secure, real-time p2p media streaming, leveraging native platform features and server-side components brings up new communication capabilities for web and native mobile applications, allowing for advanced multi-user use cases such as video broadcasting, conferencing, and media recording.
    Fifty billion connected devices and still no winning protocols standards. HTTP, WebSockets, MQTT, and CoAP seem to be leading in the IoT protocol race at the moment but many more protocols are getting introduced on a regular basis. Each protocol has its pros and cons depending on the nature of the communications. Does there really need to be only one protocol to rule them all? Of course not. In his session at @ThingsExpo, Chris Matthieu, co-founder and CTO of Octoblu, walk you through how Oct...
    Major trends and emerging technologies – from virtual reality and IoT, to Big Data and algorithms – are helping organizations innovate in the digital era. However, to create real business value, IT must think beyond the ‘what’ of digital transformation to the ‘how’ to harness emerging trends, innovation and disruption. Architecture is the key that underpins and ties all these efforts together. In the digital age, it’s important to invest in architecture, extend the enterprise footprint to the cl...
    Almost everyone sees the potential of Internet of Things but how can businesses truly unlock that potential. The key will be in the ability to discover business insight in the midst of an ocean of Big Data generated from billions of embedded devices via Systems of Discover. Businesses will also need to ensure that they can sustain that insight by leveraging the cloud for global reach, scale and elasticity.
    One of biggest questions about Big Data is “How do we harness all that information for business use quickly and effectively?” Geographic Information Systems (GIS) or spatial technology is about more than making maps, but adding critical context and meaning to data of all types, coming from all different channels – even sensors. In his session at @ThingsExpo, William (Bill) Meehan, director of utility solutions for Esri, will take a closer look at the current state of spatial technology and ar...
    A critical component of any IoT project is what to do with all the data being generated. This data needs to be captured, processed, structured, and stored in a way to facilitate different kinds of queries. Traditional data warehouse and analytical systems are mature technologies that can be used to handle certain kinds of queries, but they are not always well suited to many problems, particularly when there is a need for real-time insights.
    Explosive growth in connected devices. Enormous amounts of data for collection and analysis. Critical use of data for split-second decision making and actionable information. All three are factors in making the Internet of Things a reality. Yet, any one factor would have an IT organization pondering its infrastructure strategy. How should your organization enhance its IT framework to enable an Internet of Things implementation? In his session at @ThingsExpo, James Kirkland, Red Hat's Chief Arch...
    The IoT industry is now at a crossroads, between the fast-paced innovation of technologies and the pending mass adoption by global enterprises. The complexity of combining rapidly evolving technologies and the need to establish practices for market acceleration pose a strong challenge to global enterprises as well as IoT vendors. In his session at @ThingsExpo, Clark Smith, senior product manager for Numerex, will discuss how Numerex, as an experienced, established IoT provider, has embraced a ...
    Everyone knows that truly innovative companies learn as they go along, pushing boundaries in response to market changes and demands. What's more of a mystery is how to balance innovation on a fresh platform built from scratch with the legacy tech stack, product suite and customers that continue to serve as the business' foundation. In his General Session at 19th Cloud Expo, Michael Chambliss, Head of Engineering at ReadyTalk, will discuss why and how ReadyTalk diverted from healthy revenue an...
    SYS-CON Events announced today that Hitrons Solutions will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Hitrons Solutions Inc. is distributor in the North American market for unique products and services of small and medium-size businesses, including cloud services and solutions, SEO marketing platforms, and mobile applications.