###########################################################

# Description: Canopy SM traffic analyzer

# Copyright 2005 NetMechanica - All rights reserved

###########################################################

# Database variables

string sConnectionString = "DSN=Traffic"

string sSelectStatement = "SELECT PhysicalAddress, sum(InBytes) as InTraffic, sum(OutBytes) as OutTraffic from traffic where PollingTime > DateAdd('h',-1,Now()) group by PhysicalAddress;"

int nDatabaseID = DBOpen(sConnectionString)

if (nDatabaseID == -1)

  # Place error handling/reporting code here

  Println("Failed to open database")

  stop

endif

array InChartData

array OutChartData

array TableData = DBSelect(nDatabaseID, sSelectStatement)

if (DBGetSQLStatus(nDatabaseID)) == FALSE)

  Println(DBGetSQLErrorString(nDatabaseID))

else

  int nPosition

  string sIndex

  string sPhysicalAddress

  int nInTraffic, nOutTraffic

  for(nPosition = 0; nPosition < GetArraySize(TableData); nPosition++)

     sIndex = GetArrayIndex(TableData, nPosition)

     sPhysicalAddress = TableData[sIndex]["PhysicalAddress"]

     nInTraffic = ToInteger(TableData[sIndex]["InTraffic"])/1024

     nOutTraffic = ToInteger(TableData[sIndex]["OutTraffic"])/1024

     InChartData[sPhysicalAddress] = nInTraffic

     OutChartData[sPhysicalAddress] = nOutTraffic

     Println(sPhysicalAddress, TAB, nInTraffic, TAB, nOutTraffic)    

  endfor

endif   

DBClose(nDatabaseID)        

# Create charts

string sCurrentTime = GetTimeString()

string sIncomingTitle = sCurrentTime + ": Incoming traffic (KB) consumed within last hour"

string sOutgoingTitle = sCurrentTime + ": Outgoing traffic (KB) consumed within last hour"

CreatePieChart("C:\TrafficIn.svg", sIncomingTitle, InChartData)

CreatePieChart("C:\TrafficOut.svg", sOutgoingTitle, OutChartData)

Println("Done")