在七月中的時候曾經寫過一篇AWStats 重新分析特定時段 log 的方法,當時是第一次遇到 AWStats 報表執行失敗的問題,很不幸的後來又陸續遇到幾次需要重跑 AWStats 報表的需求。原本是參考Neo's Blog - awstats 加入/重新計算分析某時段的方法,老老實實的手動去修改 AWStats 統計資料檔中的「LastLine」、「LastTime」、「LastUpdate」三個參數,但由於我要計算的報表多達 26 個,連續 26 次用 vi 去編輯統計資料檔中的三行資料不但累人,而且很容易出錯!經過一番摸索,終於利用三個指令就把 26 個檔案中的資料一次修改完成!
其實這次用到的技巧跟前陣子分享的[Shell Script] 批次修改使用者的密碼有效期限 - V2差不多,主要是利用 xargs -i 來濃縮大量、只有一個參數不同的指令。這次要用到的指令範例如下:
批次將 26 個 AWStats 統計資料檔的 LastTime 修改為「LastTime 20100630000000」:
find /path/to/awstats/statistic/files -name awstats122010* | xargs -i sed -i '/^LastTime/c LastTime 20100630000000' {}
首先利用 find 指令找出要修改的月份的所有統計資料檔(-name 參數支援 Regular Expression),此例是要找出2010年12月的檔案。因為 find 的結果會是完整的檔案路徑(e.g., /etc/fstab),因此可作為 sed 指令的參數,用以指定要修改的檔案。
下一步是利用 sed -i 指令來編輯檔案,在此也支援 Regular Expression,因此「^LastTime」就是以「LastTime」開頭的那一行文字,這裡的「^」很重要,表示這一行文字的開頭第一個字就是「L」,若去掉「^」,則會一併編輯到「#LastTime」的註解文字。
找到 LastTime 開頭的那行文字以後,「c」表示整行取代,因此「c」後面接的就是我們想要這行變成怎樣的最後內容:「LastTime 20100630000000」(不一定要指定成2010年6月30號,只要日期比今天更早就可以了)。
最後最重要的就是「{}」了,xargs -i 會把 find pipe 過來的完整檔案路徑代入「{}」中(一次代入一個檔案),因此就看 find 指令可以找到多少檔案(以我的例子來說是 26 個),這行指令就可以一次修改多少檔案中的「LastTime」的內容了!
接下來要編輯「LastLine」和「LastUpdate」的內容就很簡單了:
find /var/lib/awstats/ -name awstats122010* | xargs -i sed -i '/^LastLine/c LastLine 20100630000000 0 0 0' {}
find /var/lib/awstats/ -name awstats122010* | xargs -i sed -i '/^LastUpdate/c LastUpdate 20100630000000 0 0 0 0 0' {}
學會 xargs -i 以後真的是太好用了,很快就越用越上手,想忘也忘不掉啦!
2010年12月22日
2010年8月16日
兩種更好的 AWStats 報表呈現方式 - BetterAWStats & JAWStats
前陣子在 AWStats 上啟用了內建的日報表 (daily report) 功能,接下來繼續 survey 週報表 (weekly report),無意間找到另外兩個讓 AWStats 的報表呈現全新風貌的套件:BetterAWStats 和 JAWStats (這兩個套件的 link 可以參考 Wikipedia - AWStats 的 External links,看來也沒有其他提供不同 AWStats Report 格式的 project 了)。
安裝這兩個套件以後,除了可以更輕鬆的閱讀 AWStats 報表以外,這兩個套件也各自提供了一些官方 AWStats 報表無法提供的功能。另一個好處是這兩個套件的作法都是讀取 AWStats 的統計資料後,再以不同的方式呈現報表,因此不會對系統造成額外的負擔。
BetterAWStats
基本資料
AWStats 官方的報表只能看到「某年度所有月份」的統計資料:
因此若有「檢視跨年度資料」的需求,就適合用 BetterAWStats 來呈現。
JAWStats
基本資料
Visitors each Month (月份可跨年)
Visitors each Year (可檢視各年度總計)
Calendar of Visitors this Month (可提供週流量/點擊數統計 的功能!! 看右手邊那兩欄就是了)
把流量、點擊數等等放到月曆裡面,很棒的介面。
就這兩個套件來說,安裝 & 設定 & 使用都很簡單,但是 JAWStats 的介面更新穎好用,且反應速度比 BetterAWStats 快很多,功能也更強,因此最後還是推薦 JAWStats 啦!可惜這套件已經超久沒更新了 ... 希望未來更新版的 AWStats 的資料格式都可以維持 backward compatibility,不然就麻煩啦!
參考資料:
安裝這兩個套件以後,除了可以更輕鬆的閱讀 AWStats 報表以外,這兩個套件也各自提供了一些官方 AWStats 報表無法提供的功能。另一個好處是這兩個套件的作法都是讀取 AWStats 的統計資料後,再以不同的方式呈現報表,因此不會對系統造成額外的負擔。
BetterAWStats
基本資料
- 官網
- Online Demo
- Help Forum
- 安裝 & config.php 修改方式請參考 betterawstats-1.0.zip 解壓縮後的 \betterawstats\docs\install.txt,蠻簡單的
AWStats 官方的報表只能看到「某年度所有月份」的統計資料:
因此若有「檢視跨年度資料」的需求,就適合用 BetterAWStats 來呈現。
安裝欲到的問題 & 解法
- Call to undefined function: memory_get_peak_usage [Fixed]
- [Php] Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to a
llocate 20001 bytes) in /betterawstats/core/data.inc.php on line 331
使用上的問題
- 繪製網頁的速度挺慢的,也很吃 server 的 memory。我管理的 site 中資料比較大的,甚至會超出 php.ini 中設定的 memory_limit (64 MB) (已經從預設的 16 MB 放大4倍了)。
- All(daily) 和 All(monthly) 的表格呈現方式不容易閱讀 (橫向無限延伸)。
JAWStats
基本資料
- 官網
- Online Demo
- JAWStats Community Forum
- 安裝方式請參考官網的 Documentation
Visitors each Month (月份可跨年)
Visitors each Year (可檢視各年度總計)
Calendar of Visitors this Month (可提供週流量/點擊數統計 的功能!! 看右手邊那兩欄就是了)
把流量、點擊數等等放到月曆裡面,很棒的介面。
安裝欲到的問題 & 解法
- 由於 JAWStats 已經好久沒更新了,因此有人把這個 project fork 出一個叫做 MAWStats 的 project,目標提供更多的報表檢視方式,但是我一直裝不起來,MAWStats 始終無法讀取 AWStats 的統計資料。
使用上的問題
- JAWStats 是根據 AWStats 的月報表格式來設計,不支援日報表 (daily report),不過這點影響不算大,日報表用 AWStats 內建的報表格式即可。
- 如同作者所說 (Any disadvantages?),壞處是 mouse click 比以前多,因為每一個分頁都只有顯示以前完整報表的一部分資料。但我覺得這也沒太大問題,反應速度快比較重要。
小結
就這兩個套件來說,安裝 & 設定 & 使用都很簡單,但是 JAWStats 的介面更新穎好用,且反應速度比 BetterAWStats 快很多,功能也更強,因此最後還是推薦 JAWStats 啦!可惜這套件已經超久沒更新了 ... 希望未來更新版的 AWStats 的資料格式都可以維持 backward compatibility,不然就麻煩啦!
(因為 OS、Search Engine、Browser 的版本不斷推陳出新,因此 AWStats 主程式也常常需要跟著升級,不然就無法辨識最新版的軟體了。)
參考資料:
2010年8月11日
[AWStats] 刪除因 awstats.pl 執行不完全造成的 awstatsMMYYYYDD.mySite.tmp.### 檔案
在上一篇文章提到,前陣子調整 AWStats 更新統計資料檔的 cron job (其實就是執行 awstats.pl -update) 的時間後,AWStats 統計資料檔都沒有正常更新,除了會產生錯誤訊息以外,還會在存放統計資料檔的資料夾 (config 檔中的 DirData) 中留下檔名為 awstatsMMYYYYDD.mySite.tmp.### (數字可能從 3 位到 5 位) 的暫存檔案。
以我管理的 AWStats Server 為例,由於要分析的網站多達 26 個,因此我有利用 DirData 這個設定值來區分不同網站群組的統計資料檔,除此之外,每個網站群組下還另外細分月報表以及日報表資料夾,造成 xxx.tmp.### 檔案分佈在各種不同深度的目錄中,那麼要如何一次把這些檔案清光呢?
一開始我想要用 ls -lR | grep tmp 指令來找出所有的暫存檔案,這個方法雖然可以把檔案名稱 & 檔案屬性列出來,但由於缺乏檔案的完整路徑,因此無法對檔案進行刪除或者其他的操作。
後來(壞毛病又發作)我參考了 Renaming Files As Lowercase Using Perl 這篇文章,把 rename 的動作改成「rm -f」,由於 Perl 支援 Regular Expression,因此要找出檔名格式為 xxx.tmp.### 的檔案非常容易。
但是在測試 ok 以後我又覺得,如果每次要做類似的事情都要寫個 Perl script,或者把現有的 script 打開來編輯,未免也太麻煩了吧!後來同事提醒我,find 指令的回傳結果就是完整的檔案路徑,在查閱 find 指令的 man page 之後,終於發現只要用以下的一行指令就可以搞定了:
find [AWStats DirData] -name *.tmp.* -delete
由於 -name 這個 switch 本身就支援 Regular Expression,因此用來找檔名中含有 tmp 的檔案相當容易,不放心的話可以先不要加上 -delete 這個 switch,就可以把找到的檔案列在螢幕上逐一確認是否有誤判的情況。
確認把暫存檔案 (xxx.tmp.###) 都找出來以後,加上 -delete 這個 switch,find 就會幫你把找出來的檔案砍掉囉!
找到正確作法 (& find 的正確用法) 以後,感覺真是爽快阿 :D
以我管理的 AWStats Server 為例,由於要分析的網站多達 26 個,因此我有利用 DirData 這個設定值來區分不同網站群組的統計資料檔,除此之外,每個網站群組下還另外細分月報表以及日報表資料夾,造成 xxx.tmp.### 檔案分佈在各種不同深度的目錄中,那麼要如何一次把這些檔案清光呢?
一開始我想要用 ls -lR | grep tmp 指令來找出所有的暫存檔案,這個方法雖然可以把檔案名稱 & 檔案屬性列出來,但由於缺乏檔案的完整路徑,因此無法對檔案進行刪除或者其他的操作。
後來(壞毛病又發作)我參考了 Renaming Files As Lowercase Using Perl 這篇文章,把 rename 的動作改成「rm -f」,由於 Perl 支援 Regular Expression,因此要找出檔名格式為 xxx.tmp.### 的檔案非常容易。
但是在測試 ok 以後我又覺得,如果每次要做類似的事情都要寫個 Perl script,或者把現有的 script 打開來編輯,未免也太麻煩了吧!後來同事提醒我,find 指令的回傳結果就是完整的檔案路徑,在查閱 find 指令的 man page 之後,終於發現只要用以下的一行指令就可以搞定了:
find [AWStats DirData] -name *.tmp.* -delete
由於 -name 這個 switch 本身就支援 Regular Expression,因此用來找檔名中含有 tmp 的檔案相當容易,不放心的話可以先不要加上 -delete 這個 switch,就可以把找到的檔案列在螢幕上逐一確認是否有誤判的情況。
確認把暫存檔案 (xxx.tmp.###) 都找出來以後,加上 -delete 這個 switch,find 就會幫你把找出來的檔案砍掉囉!
找到正確作法 (& find 的正確用法) 以後,感覺真是爽快阿 :D
2010年8月9日
[AWStats] [解法] Error: Command for pipe 'xxx/logresolvemerge.pl xxx.log failed, Setup may be wrong. 問題
最近發現 AWStats 更新統計資料檔耗時很久,現在都要拖到早上 8 點多才能完成,因此就調整了執行 AWStats 統計資料檔更新的 cron job,把執行時間往前移,沒想到改好以後連續兩天 AWStats 都沒有正確更新,查看執行結果以後發現如下的 log (這是自己把 awstats.pl 的 output 另存的 log,預設不會儲存):
Mon Aug 9 01:31:06 CST 2010 Start analyzing [mySite]
==================================================
==================================================
Create/Update database for config "/path/to/awstats.[mySite].conf" by AWStats version 7.0 (build 1.969)
From data in log file "/path/to/logresolvemerge.pl /path/to/logs |"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Error: Command for pipe '/path/to/logresolvemerge.pl /path/to/logs2 |' failed
Setup ('/path/to/awstats.[mySite].conf' file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in 'docs' directory).
Mon Aug 9 01:31:07 CST 2010 Finish analyzing [mySite]
==================================================
==================================================
如果根據 awstats.pl 的 output 去查看 config file 內容、檔案存取權限,或者 AWStats 的文件恐怕也找不出甚麼頭緒,後來我發現每天要分析的 log 檔根本沒有被抓下來,因為我把 cron job 的執行時間移到比 log server 準備好 log 的時間更早了!
接下來就可以很合理的懷疑,是不是「當 log 檔不存在時」awstats.pl 就會產生以上的 output?經過測試 (執行 /path/to/awstats.pl -update -DatabaseBreak=month -config= [mySite] 指令),果然當 log 檔不存在時,awstats.pl 就會產生以上的 output!
這個錯誤訊息跟 config 檔的內容、檔案存取權限等等是完全沒關係的 ...
Mon Aug 9 01:31:06 CST 2010 Start analyzing [mySite]
==================================================
==================================================
Create/Update database for config "/path/to/awstats.[mySite].conf" by AWStats version 7.0 (build 1.969)
From data in log file "/path/to/logresolvemerge.pl /path/to/logs |"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Error: Command for pipe '/path/to/logresolvemerge.pl /path/to/logs2 |' failed
Setup ('/path/to/awstats.[mySite].conf' file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in 'docs' directory).
Mon Aug 9 01:31:07 CST 2010 Finish analyzing [mySite]
==================================================
==================================================
如果根據 awstats.pl 的 output 去查看 config file 內容、檔案存取權限,或者 AWStats 的文件恐怕也找不出甚麼頭緒,後來我發現每天要分析的 log 檔根本沒有被抓下來,因為我把 cron job 的執行時間移到比 log server 準備好 log 的時間更早了!
接下來就可以很合理的懷疑,是不是「當 log 檔不存在時」awstats.pl 就會產生以上的 output?經過測試 (執行 /path/to/awstats.pl -update -DatabaseBreak=month -config= [mySite] 指令),果然當 log 檔不存在時,awstats.pl 就會產生以上的 output!
這個錯誤訊息跟 config 檔的內容、檔案存取權限等等是完全沒關係的 ...
2010年8月1日
SIKULI 初體驗 - 利用 SIKULI 每日自動將 50 個 AWStats Report 另存成 mht 檔
話說今年 1 月底的時候,看到一篇很紅的文章:Sikuli 帶來的意義與無窮的潛力,作者是 vgod,當時有些知名的網站/部落客也寫過感想:
SIKULI 官網首頁有放一個 Demo,內容是自動設定網卡IP:
當時看完以後覺得超炫,但是後來也沒花時間去嘗試看看,直到上週想要作一件事:把 AWStats 每天產生的報表存成靜態網頁 (mht),才想到用 SIKULI 應該可以很簡單的完成這樣工作!
需求
之所以想要作這件事情,是因為每次瀏覽 AWStats 報表的時候都是連到一個如:http://myAWStatsReportSite/awstats/awstats.pl?&config=mySite 的 url,此時 awstats.pl 這隻程式會讀取事先計算好的統計資料檔,然後即時的繪製月報表。
對於規模很小的網站來說大概沒啥感覺,但是對於每日流量到達 GB 以上等級的網站來說,在每月下旬的時候點選月報表的速度就明顯的慢很多,而若想要把 10 個左右的這類網站的流量合併統計,那麼到了月底的時候,即時繪製月報表最多可以花上超過 20 秒,這是個無法令人接受的速度!
仔細想想,這種報表的資料來源是歷史資料,一旦歷史資料分析完畢以後,往後不管在任何時間點選這張報表,內容應該都是一樣的,因此很適合以靜態網頁來呈現。為了方便檔案管理 & 加速網路傳輸,我決定把檔案另存成 mht 檔,這樣以後看報表的速度就快多啦!
問題是我的 AWStats 分析的網站很多,月報表 + 日報表總共有 50 個,叫我每天、手動一個一個把網址貼到 IE,然後另存成 mht,再 FTP 到 Server 上 ..... 我才不要哩,又不是吃飽沒事幹!這就是 SIKULI 大顯身手的時候啦!(是說就是要把這種瑣碎工作弄成自動化,才可以每天吃飽沒事幹阿 ... Zzz)
SIKULI 初體驗
要使用 SIKULI,首先要去官網下載最新版的 SIKULI IDE: 1.0.1 (Java 6 or 7 is required, 2013-08-31 更新版本),目前對於 Windows & Mac 的支援較佳,聽說也有人把 SIKULI port 到 Linux 上。我抓的是 Windows 版,在 Win XPP 上安裝非常簡單,一路 Next 到底就好。
Sikuli IDE 打開以後大概長這樣:
版面配置跟很多主流的 IDE 差不多,很容易上手。
接下來就可以動手寫程式啦!在官網的 Documentation 中有 Tutorials & Examples 可以參考,花點時間看過去以後就知道程式大概要怎麼寫了。
基本上程式寫起來很簡單,由於 SIKULI 內建強大的電腦視覺引擎 (computer vision engine),內建的 function 如 find、findAll、click、paste 等都可以餵入一張圖片作為參數,當 SIKULI 執行 sikuli script 時就會去比對目前螢幕上可視區域中與指定圖片相符合的區域 (region),並且對該區域執行指定的動作 (e.g., click、paste)。
用文字寫起來太囉唆了,直接跑一個官網上的範例最容易瞭解了: Click all starts in Gmail
將 zip 檔下載解壓縮,用 SIKULI 打開後,再準備好一個 Gmail 視窗:
經過測試,如果用範例內的 find 函式會有問題 (TypeError: 'edu.mit.csail.uid.Match' object is not iterable,看來 find 函式的 return 值是單一的物件,不是如陣列一樣可以作 iteration 的資料結構),改用 findAll 以後就正常了:
當 SIKULI Script 在執行的時候,會看到一瞬間滑鼠游標依序由上往下把所有未標記成星號的 Gmail 郵件標記成星號,真的是非常有趣!
另外,SIKULI 可以用 click / doubleClick / rightClick 等函式來模擬滑鼠事件,以 type 函式控制鍵盤輸入,因此只要可以用滑鼠 + 鍵盤完成的工作,都可以寫成程式讓 SIKULI 自動執行 (應該有超過 90% 的工作都可以用滑鼠 + 鍵盤完成吧?所以 SIKULI 真的是潛力無窮呢!)。
在以 type控制鍵盤輸入方面,SIKULI 支援 Windows Key, Ctrl, Alt, Tab, Up, Down, F1~F15 等特殊鍵,非常方便,我最常用的有以下幾種:
由於 Sikuli 是以 Jython 為基礎發展的,而 Jython 是 Python for the Java Platform,因此要查詢基本語法的話可以參考 Jython / Python 的資料。
我這次寫的 script 邏輯如下:
程式利用的技巧就如同上述 4 點,並不困難。
SIKULI 官網首頁有放一個 Demo,內容是自動設定網卡IP:
當時看完以後覺得超炫,但是後來也沒花時間去嘗試看看,直到上週想要作一件事:把 AWStats 每天產生的報表存成靜態網頁 (mht),才想到用 SIKULI 應該可以很簡單的完成這樣工作!
需求
之所以想要作這件事情,是因為每次瀏覽 AWStats 報表的時候都是連到一個如:http://myAWStatsReportSite/awstats/awstats.pl?&config=mySite 的 url,此時 awstats.pl 這隻程式會讀取事先計算好的統計資料檔,然後即時的繪製月報表。
對於規模很小的網站來說大概沒啥感覺,但是對於每日流量到達 GB 以上等級的網站來說,在每月下旬的時候點選月報表的速度就明顯的慢很多,而若想要把 10 個左右的這類網站的流量合併統計,那麼到了月底的時候,即時繪製月報表最多可以花上超過 20 秒,這是個無法令人接受的速度!
仔細想想,這種報表的資料來源是歷史資料,一旦歷史資料分析完畢以後,往後不管在任何時間點選這張報表,內容應該都是一樣的,因此很適合以靜態網頁來呈現。為了方便檔案管理 & 加速網路傳輸,我決定把檔案另存成 mht 檔,這樣以後看報表的速度就快多啦!
問題是我的 AWStats 分析的網站很多,月報表 + 日報表總共有 50 個,叫我每天、手動一個一個把網址貼到 IE,然後另存成 mht,再 FTP 到 Server 上 ..... 我才不要哩,又不是吃飽沒事幹!這就是 SIKULI 大顯身手的時候啦!(是說就是要把這種瑣碎工作弄成自動化,才可以每天吃飽沒事幹阿 ... Zzz)
SIKULI 初體驗
要使用 SIKULI,首先要去官網下載最新版的 SIKULI IDE: 1.0.1 (Java 6 or 7 is required, 2013-08-31 更新版本),目前對於 Windows & Mac 的支援較佳,聽說也有人把 SIKULI port 到 Linux 上。我抓的是 Windows 版,在 Win XPP 上安裝非常簡單,一路 Next 到底就好。
Sikuli IDE 打開以後大概長這樣:
接下來就可以動手寫程式啦!在官網的 Documentation 中有 Tutorials & Examples 可以參考,花點時間看過去以後就知道程式大概要怎麼寫了。
基本上程式寫起來很簡單,由於 SIKULI 內建強大的電腦視覺引擎 (computer vision engine),內建的 function 如 find、findAll、click、paste 等都可以餵入一張圖片作為參數,當 SIKULI 執行 sikuli script 時就會去比對目前螢幕上可視區域中與指定圖片相符合的區域 (region),並且對該區域執行指定的動作 (e.g., click、paste)。
用文字寫起來太囉唆了,直接跑一個官網上的範例最容易瞭解了: Click all starts in Gmail
將 zip 檔下載解壓縮,用 SIKULI 打開後,再準備好一個 Gmail 視窗:
經過測試,如果用範例內的 find 函式會有問題 (TypeError: 'edu.mit.csail.uid.Match' object is not iterable,看來 find 函式的 return 值是單一的物件,不是如陣列一樣可以作 iteration 的資料結構),改用 findAll 以後就正常了:
另外,SIKULI 可以用 click / doubleClick / rightClick 等函式來模擬滑鼠事件,以 type 函式控制鍵盤輸入,因此只要可以用滑鼠 + 鍵盤完成的工作,都可以寫成程式讓 SIKULI 自動執行 (應該有超過 90% 的工作都可以用滑鼠 + 鍵盤完成吧?所以 SIKULI 真的是潛力無窮呢!)。
在以 type控制鍵盤輸入方面,SIKULI 支援 Windows Key, Ctrl, Alt, Tab, Up, Down, F1~F15 等特殊鍵,非常方便,我最常用的有以下幾種:
- type("c", KEY_CTRL):ctrl+c
- type("\t", KEY_ALT):alt + tab
- sleep(n):讓 process 睡 n 秒
- var = Env.getClipboard():把系統剪貼簿中的暫存資料存到變數 var 中
- paste("IE開啟舊檔.png", var):把變數 (URL) 貼到 IE 的「開啟舊檔 (ctrl-o )」視窗中
由於 Sikuli 是以 Jython 為基礎發展的,而 Jython 是 Python for the Java Platform,因此要查詢基本語法的話可以參考 Jython / Python 的資料。
我這次寫的 script 邏輯如下:
測試情境:
- AWStats Static Report test.xlsx 隨便放哪裡都可以,但是要先用 Excel 開過一次,讓檔名出現在最新開啟過的檔案清單 (MRU list)中
- 要在「我的文件」中建立一個名為「AWStats Static Reports」的資料夾 (不然就要自己重新抓圖,去改程式碼第12行)
- script 執行完畢後會回到 SIKULI IDE (執行過程中發生錯誤也會回到 IDE 中),此時可再檢視「我的文件」->「AWStats Static Reports」中是否有三個 mht 檔。
Sikuli IDE 的優點:
- 如同[T客邦] 抓圖寫程式,SIKULI 將改變世界一文中所說,Graphical Scripting Language 真的是非常有趣,實際上若打開 Sikuli source files 資料夾中的 ProjectName.py 檔來看就可以知道,在 Sikuli IDE 中看到的圖檔在程式碼中其實是檔名 (如「1.png」),但是 IDE 在 project 資料夾中找到這個檔以後,就把圖檔讀出來顯示在畫面上,令人覺得很親切,大大增加了程式碼的可讀性和易用性,該行程式要作甚麼真的是一目瞭然。
- 大大降低寫程式的門檻,讓一般人也有機會自己把平常操作電腦的瑣碎步驟自動化。
- SIKULI IDE 的配色看起來很舒服。
Sikuli IDE 目前的小缺點:
- 在 Win XPP 下,按 Alt + Tab 從 Sikuli IDE 跳到其他視窗,再跳回 Sikuli IDE 後,(有時候)會 focus 在 Sikuli IDE 的「檔案」選單,而非程式碼編輯器中,這點不太方便。
- 將程式碼從一個 project copy 到另一個 project,或者將 project 另存新檔後,有時候會有問題,例如 function 的左括號「(」看起來不見了 (但是看ProjectName.py 檔會發現還在,如果在 IDE 裡面多加一個「(」反而會讓 script 無法執行),或者是找不到圖檔 (這時要重新指定圖檔),會導致執行時的 SyntaxError。
未來目標:
- 設定 Windows 排程,在上班前把這個 script 跑過一次,等到上班時間就可以直接瀏覽靜態的 mht 報表了
- 在開啟 IE & Excel 之前,先把用來存放 mht 檔的資料夾清空
- 50 個 mht 檔都產生完畢以後,自動分門別類的以 FTP 上傳到 Server 中
參考資料:
2010年7月12日
AWStats 重新分析特定時段 log 的方法
最近手上維護的 AWStats 網站出了一點問題,連續幾天的分析報表一片空白,因此花點時間研究了如何讓 AWStats 重新分析特定時段 log 的方法。
我主要參考的是:Neo's Blog - awstats 加入/重新計算分析某時段的方法,但是一開始嘗試多次都沒有成功。
最後我發現,若目前系統時間是 2010-07,則存放統計資料的資料夾中會出現 awstats062010.yoursite.txt & awstats072010.yoursite.txt (要知道 AWStats 產出的統計資料檔放在哪個目錄,請參考 AWStats config 檔中的 DirData 參數),
此時若欲重新分析 2010-06 的資料,必須先把 awstats072010.yoursite.txt 檔案移到 DirData 之外,否則將 Neo's Blog - awstats 加入/重新計算分析某時段的方法 一文中所說的第 4 步執行完畢後,雖然可正確看到 AWStats 的 output ( Found XXX new qualified records ... 等等),但 awstats062010.yoursite.txt 檔案還是不會被更新!
會注意到這個問題,是因為我改完 awstats062010.yoursite.txt 中的 LastLine、LastTime、LastUpdated 的值以後,跑完 awstats.pl 之後只有 awstats072010.yoursite.txt 檔案的最後更新時間有改變,看來 awstats.pl 根本沒有去讀 awstats062010.yoursite.txt 這個檔案!
在第 3 步和第 4 步之間加入「把當月的統計資料檔移出 DirData 目錄」這個動作,並執行完第 4 步的重新分析後,要記得把當月的統計資料檔 (awstats072010.yoursite.txt) 搬回 DirData 目錄,否則當月的統計報表會變成一片空白哦~
同場加映:Hourly, daily, (and yearly?) reporting period support debuts,daily report 的實作蠻簡單的,下一步是思考如何製作 weekly report。
我主要參考的是:Neo's Blog - awstats 加入/重新計算分析某時段的方法,但是一開始嘗試多次都沒有成功。
最後我發現,若目前系統時間是 2010-07,則存放統計資料的資料夾中會出現 awstats062010.yoursite.txt & awstats072010.yoursite.txt (要知道 AWStats 產出的統計資料檔放在哪個目錄,請參考 AWStats config 檔中的 DirData 參數),
此時若欲重新分析 2010-06 的資料,必須先把 awstats072010.yoursite.txt 檔案移到 DirData 之外,否則將 Neo's Blog - awstats 加入/重新計算分析某時段的方法 一文中所說的第 4 步執行完畢後,雖然可正確看到 AWStats 的 output ( Found XXX new qualified records ... 等等),但 awstats062010.yoursite.txt 檔案還是不會被更新!
會注意到這個問題,是因為我改完 awstats062010.yoursite.txt 中的 LastLine、LastTime、LastUpdated 的值以後,跑完 awstats.pl 之後只有 awstats072010.yoursite.txt 檔案的最後更新時間有改變,看來 awstats.pl 根本沒有去讀 awstats062010.yoursite.txt 這個檔案!
在第 3 步和第 4 步之間加入「把當月的統計資料檔移出 DirData 目錄」這個動作,並執行完第 4 步的重新分析後,要記得把當月的統計資料檔 (awstats072010.yoursite.txt) 搬回 DirData 目錄,否則當月的統計報表會變成一片空白哦~
同場加映:Hourly, daily, (and yearly?) reporting period support debuts,daily report 的實作蠻簡單的,下一步是思考如何製作 weekly report。
訂閱:
文章 (Atom)
Google Spreadsheet 裡用規則運算式
最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D
-
好久沒開 Chart Control 議題了 剛好前陣子 Codeplex 出現可以輕鬆建立 Excel 檔案的 Library- NPOI 於是坎尼想說研究一下,看能不能把 Chart Control 匯出圖片到 Excel 中 沒想到只花了不到1小時就研究...
-
雖然在圖片上直接按右鍵就可以另存圖片 (沒設定權限的話 不過客戶還是想要有個按鈕能讓圖片下載 所以坎尼只好再想辦法滿足客戶的需求 UI設定 首先,在畫面上準備好下載按鈕和圖表 順便設定一下樣式和內容,這部分之前講過很多次就不多談了 撰寫按鈕事件 先宣告 System.IO.Mem...
-
拖稿拖了好幾天 坎尼夢見了富檻出新連載 所以上來把欠的東西還一還 (富檻快給我畫 坎尼廢話就少講一點 直接進入 自訂分頁 Sample 首先,畫面上要有個 Gridview 這邊坎尼偷懶用了 SqlDataSource 見下圖 可以看到 Pager 已經出現了 來看一下...







