Si dice che un’immagine valga mille parole, quindi dopo aver introdotto LogParser ed aver mostrato alcuni script d’esempio per filtrare vari tipi di log, vediamo questa volta come presentare l’output delle nostre query in un grafico.
Per prima cosa dobbiamo installare gli Office Web Components, senza di questi otterremmo un errore simile a questo:
Error creating output format "chart": This output format requires a licensed Microsoft Office Chart Web Component to be installed on the local machine
Mentre l’help di LogParser ci dice questo:
chartType Values: name of chart type Default: Line Description: Chart type Details: The set of available chart types depends on the version of the Microsoft Office Web Components installed on the local computer. For a list of the available chart types, type the following help command from the command-line shell: LogParser -h -o:CHART
L’ultima versione degli Office Web Components che ho trovato disponibile su Internet è la versione 11, rilasciata con Office 2003, ecco i link per il download:
Basato su un log di IIS, questo grafico a torta mostra la quantità di bytes serviti per ogni tipo di file:
LogParser "SELECT TO_UPPERCASE(EXTRACT_EXTENSION(cs-uri-stem)) AS PageType, MUL(PROPSUM(sc-bytes),100.0) AS Bytes INTO Pie.gif FROM *.log GROUP BY PageType ORDER BY Bytes DESC" -chartType:PieExploded -chartTitle:"Bytes per data type" -categories:off -o:chart -i:iisw3c
Questa volta vediamo gli stessi dati ma espressi in percentuale e con una torta in 3D
logparser "select extract_extension(cs-uri-stem) as Resource, mul(propcount(*),100.0) as ResourceHits into percentage.jpg from *.log group by Resource order by ResourceHits desc" -chartType:PieExploded3D -chartTitle:"Percentages per data type" -categories:off -o:chart -i:iisw3c
Questo può essere interessante per farsi un’idea delle pagine di un sito che ricevono il maggior numero di visite:
logparser "select quantize(time, 60) as TimeGenerated, count(*) as Hits into qnt.gif from *.log where to_lowercase(extract_extension(cs-uri-stem))='aspx' group by TimeGenerated" -i:iisw3c -o:chart -chartType:Line
Ottenere il numero di visitatori unici (in effetti si tratta del numero di ip univoci) che visitano il nostro sito è un po’ più complesso. Teoricamente la query da utilizzare sarebbe questa:
select date, count(distinct c-ip) into UniqueIPs.gif from *.log group by date" -i:iisw3c -o:chart -chartType:Line
ma se provassimo, otterremmo questo errore:
Error: Semantic Error: aggregate functions with DISTINCT arguments are not supported with GROUP BY clauses
In questo caso la soluzione sta nel dividere la query in due, salvando il risultato della prima in un file di testo sul quale lavoreremo nella seconda query:
@echo off logparser "select distinct date, c-ip into dates.txt from *.log" -i:iisw3c -o:w3clogparser "select date, count(c-ip) as UniqueIPs into UniqueIPs.gif from dates.txt group by date order by date" -i:iisw3c -o:chart -chartType:SmoothLine -view:on
Usando un linguaggio di scripting tipo JScript o VBScript è possibile creare una sorta di file di configurazione che permette di avere un maggiore controllo sul grafico che creeremo: questo maccanismo si basa su due oggetti globali che espongono Proprietà e Metodi che possono essere utilizzati per modificare aspetti quali i colori ed i font utilizzati, ed un buon numero di altri attributi. Questi due oggetti globali sono istanze degli oggetti chart e chartSpace appartenenti al Microsoft Office Web Components ChartSpace object model: per maggiori informazioni circa questi oggetti vi consiglio la MSDN ChartSpace Object Model documentation.
Riprendendo l’esempio precedente, possiamo modificare il colore di sfondo del grafico, aggiungere una Caption e modificare la dimensione del font utilizzato:
// Add a captionchartSpace.HasChartSpaceTitle = true;chartSpace.ChartSpaceTitle.Caption = "Generated by Log Parser 2.2";chartSpace.ChartSpaceTitle.Font.Size = 8;chartSpace.ChartSpaceTitle.Position = chartSpace.Constants.chTitlePositionBottom;// Change the background colorchart.PlotArea.Interior.Color = chartSpace.Constants.chColorNone;
@echo off logparser "select distinct date, c-ip into dates.txt from *.log" -i:iisw3c -o:w3clogparser "select date, count(c-ip) as UniqueIPs into UniqueIPs.gif from dates.txt group by date order by date" -i:iisw3c -o:chart -chartType:SmoothLine -config:MyScript.js -groupSize: 800x600 -view:on
Partendo da qui dovreste avere materiale sufficiente per fare altri esperimenti e migliorare ulteriormente l’aspetto dei vostri grafici: il limite è solo la vostra immaginazione
Carlo Cardella Senior Support Engineer EMEA IIS and Web Developer Support