Welcome!

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.

SIDEBAR
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) View Comments

    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.


    Most Recent Comments
    David Shadovitz 11/01/02 04:00:00 PM EST

    I've found a good use for my traffic information. One site which I track contains an important search feature. Now, on the page which displays the form for a search, I also display the user's last few searches. They are displayed as hyperlinks which the user can simply click on to re-do a search.

    @ThingsExpo Stories
    SYS-CON Events announced today that ReadyTalk, a leading provider of online conferencing and webinar services, has been named Vendor Presentation Sponsor 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. ReadyTalk delivers audio and web conferencing services that inspire collaboration and enable the Future of Work for today’s increasingly digital and mobile workforce. By combining intuitive, innovative tec...
    Why do your mobile transformations need to happen today? Mobile is the strategy that enterprise transformation centers on to drive customer engagement. In his general session at @ThingsExpo, Roger Woods, Director, Mobile Product & Strategy – Adobe Marketing Cloud, covered key IoT and mobile trends that are forcing mobile transformation, key components of a solid mobile strategy and explored how brands are effectively driving mobile change throughout the enterprise.
    If you’re responsible for an application that depends on the data or functionality of various IoT endpoints – either sensors or devices – your brand reputation depends on the security, reliability, and compliance of its many integrated parts. If your application fails to deliver the expected business results, your customers and partners won't care if that failure stems from the code you developed or from a component that you integrated. What can you do to ensure that the endpoints work as expect...
    There is growing need for data-driven applications and the need for digital platforms to build these apps. In his session at 19th Cloud Expo, Muddu Sudhakar, VP and GM of Security & IoT at Splunk, will cover different PaaS solutions and Big Data platforms that are available to build applications. In addition, AI and machine learning are creating new requirements that developers need in the building of next-gen apps. The next-generation digital platforms have some of the past platform needs a...
    WebRTC adoption has generated a wave of creative uses of communications and collaboration through websites, sales apps, customer care and business applications. As WebRTC has become more mainstream it has evolved to use cases beyond the original peer-to-peer case, which has led to a repeating requirement for interoperability with existing infrastructures. In his session at @ThingsExpo, Graham Holt, Executive Vice President of Daitan Group, will cover implementation examples that have enabled ea...
    So, you bought into the current machine learning craze and went on to collect millions/billions of records from this promising new data source. Now, what do you do with them? Too often, the abundance of data quickly turns into an abundance of problems. How do you extract that "magic essence" from your data without falling into the common pitfalls? In her session at @ThingsExpo, Natalia Ponomareva, Software Engineer at Google, provided tips on how to be successful in large scale machine learning...
    In his session at @ThingsExpo, Kausik Sridharabalan, founder and CTO of Pulzze Systems, Inc., will focus on key challenges in building an Internet of Things solution infrastructure. He will shed light on efficient ways of defining interactions within IoT solutions, leading to cost and time reduction. He will also introduce ways to handle data and how one can develop IoT solutions that are lean, flexible and configurable, thus making IoT infrastructure agile and scalable.
    SYS-CON Events announced today that Numerex Corp, a leading provider of managed enterprise solutions enabling the Internet of Things (IoT), will exhibit at the 19th International Cloud Expo | @ThingsExpo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Numerex Corp. (NASDAQ:NMRX) is a leading provider of managed enterprise solutions enabling the Internet of Things (IoT). The Company's solutions produce new revenue streams or create operating...
    In his general session at 18th Cloud Expo, Lee Atchison, Principal Cloud Architect and Advocate at New Relic, discussed cloud as a ‘better data center’ and how it adds new capacity (faster) and improves application availability (redundancy). The cloud is a ‘Dynamic Tool for Dynamic Apps’ and resource allocation is an integral part of your application architecture, so use only the resources you need and allocate /de-allocate resources on the fly.
    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...
    IoT is fundamentally transforming the auto industry, turning the vehicle into a hub for connected services, including safety, infotainment and usage-based insurance. Auto manufacturers – and businesses across all verticals – have built an entire ecosystem around the Connected Car, creating new customer touch points and revenue streams. In his session at @ThingsExpo, Macario Namie, Head of IoT Strategy at Cisco Jasper, will share real-world examples of how IoT transforms the car from a static p...
    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.
    "My role is working with customers, helping them go through this digital transformation. I spend a lot of time talking to banks, big industries, manufacturers working through how they are integrating and transforming their IT platforms and moving them forward," explained William Morrish, General Manager Product Sales at Interoute, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
    The Internet of Things can drive efficiency for airlines and airports. In their session at @ThingsExpo, Shyam Varan Nath, Principal Architect with GE, and Sudip Majumder, senior director of development at Oracle, will discuss the technical details of the connected airline baggage and related social media solutions. These IoT applications will enhance travelers' journey experience and drive efficiency for the airlines and the airports. The session will include a working demo and a technical d...
    Developing software for the Internet of Things (IoT) comes with its own set of challenges. Security, privacy, and unified standards are a few key issues. In addition, each IoT product is comprised of (at least) three separate application components: the software embedded in the device, the back-end service, and the mobile application for the end user’s controls. Each component is developed by a different team, using different technologies and practices, and deployed to a different stack/target –...
    Identity is in everything and customers are looking to their providers to ensure the security of their identities, transactions and data. With the increased reliance on cloud-based services, service providers must build security and trust into their offerings, adding value to customers and improving the user experience. Making identity, security and privacy easy for customers provides a unique advantage over the competition.
    SYS-CON Events announced today that Commvault, a global leader in enterprise data protection and information management, has been named “Bronze Sponsor” of SYS-CON's 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Commvault is a leading provider of data protection and information management solutions, helping companies worldwide activate their data to drive more value and business insight and to transform moder...
    SYS-CON Events has announced today that Roger Strukhoff has been named conference chair of Cloud Expo and @ThingsExpo 2016 Silicon Valley. The 19th Cloud Expo and 6th @ThingsExpo will take place on November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. "The Internet of Things brings trillions of dollars of opportunity to developers and enterprise IT, no matter how you measure it," stated Roger Strukhoff. "More importantly, it leverages the power of devices and the Interne...
    Personalization has long been the holy grail of marketing. Simply stated, communicate the most relevant offer to the right person and you will increase sales. To achieve this, you must understand the individual. Consequently, digital marketers developed many ways to gather and leverage customer information to deliver targeted experiences. In his session at @ThingsExpo, Lou Casal, Founder and Principal Consultant at Practicala, discussed how the Internet of Things (IoT) has accelerated our abil...
    Digital innovation is the next big wave of business transformation based on digital technologies of which IoT and Big Data are key components, For example: Business boundary innovation is a challenge to excavate third-party business value using IoT and BigData, like Nest Business structure innovation may propose re-building business structure from scratch, as Uber does in the taxicab industry The social model innovation is also a big challenge to the new social architecture with the design fr...