nsmcp::AccessAnalytics method init (protected)
<instance of nsmcp::AccessAnalytics> init
Defined in /usr/local/ns/tcl/nsmcp/lib/access-analytics.tcl
- Testcases:
- No testcase defined.
Source code: if {${:maxRows}<1 || ${:evictionLimit}<1 || ${:evictionLimit}>100} {error "positive maxRows and evictionLimit between 1 and 100 required"} if {![nsf::object::exists ${:database}] || ![${:database} info has type ::nsmcp::SQLiteDatabase]} {error "AccessAnalytics requires a SQLiteDatabase object"} next set db [${:database} connect] try { # Migrate the first SQLite draft without retaining duplicate tables. set old [$db scalar {SELECT count(*) FROM sqlite_master WHERE type='table' AND name='metadata'}] set current [$db scalar {SELECT count(*) FROM sqlite_master WHERE type='table' AND name='nsmcp_access_metadata'}] if {$old && !$current && [$db scalar {SELECT count(*) FROM sqlite_master WHERE type='table' AND name IN ('metadata','requests','evictions','diagnostics')}] == 4 && [$db scalar {SELECT value FROM metadata WHERE key='schemaVersion'}] eq "1"} { set source [$db scalar {SELECT value FROM metadata WHERE key='source'}] if {$source ne [list [ns_info server] ${:path}]} {error "draft SQLite cache belongs to another server or log source"} $db transaction { $db execute { ALTER TABLE metadata RENAME TO nsmcp_access_metadata; ALTER TABLE requests RENAME TO nsmcp_access_requests; ALTER TABLE evictions RENAME TO nsmcp_access_evictions; DROP INDEX IF EXISTS requests_time; DROP INDEX IF EXISTS requests_path_time; DROP TABLE IF EXISTS diagnostics; } } } $db execute { CREATE TABLE IF NOT EXISTS nsmcp_access_metadata (key TEXT PRIMARY KEY, value TEXT NOT NULL); CREATE TABLE IF NOT EXISTS nsmcp_access_requests ( generation INTEGER NOT NULL, offset INTEGER NOT NULL, start REAL NOT NULL, completed TEXT NOT NULL, request_id TEXT NOT NULL, path TEXT NOT NULL, pool TEXT NOT NULL, method TEXT NOT NULL, status INTEGER NOT NULL, bytes INTEGER NOT NULL, fallback INTEGER NOT NULL, excluded INTEGER NOT NULL, accept REAL, queue REAL, filter REAL, run REAL, PRIMARY KEY(generation,offset)); CREATE INDEX IF NOT EXISTS nsmcp_access_requests_time ON nsmcp_access_requests(start); CREATE INDEX IF NOT EXISTS nsmcp_access_requests_path_time ON nsmcp_access_requests(path,start); CREATE TABLE IF NOT EXISTS nsmcp_access_evictions (id INTEGER PRIMARY KEY, dropped_at INTEGER NOT NULL, first_time REAL NOT NULL, last_time REAL NOT NULL, rows INTEGER NOT NULL, reason TEXT NOT NULL); } set version [$db scalar {SELECT value FROM nsmcp_access_metadata WHERE key='schemaVersion'}] if {$version ne "" && $version ni {1 2 3}} {error "unsupported SQLite cache schema"} :peerSchema $db set identity [list [ns_info server] ${:path}] set stored [$db scalar {SELECT value FROM nsmcp_access_metadata WHERE key='source'}] if {$stored ne "" && $stored ne $identity} {error "SQLite cache belongs to another server or log source"} $db execute {INSERT OR IGNORE INTO nsmcp_access_metadata VALUES ('source',$identity)} } finally {$db close}XQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)