+++ /dev/null
-let fs = require('fs')
-let JSONCache = require('json_cache')
-
-try {
- fs.mkdirSync('analytics')
-}
-catch (err) {
- if (err.code !== 'EEXIST') // should check error type
- throw err
-}
-
-let json_cache = new JSONCache()
-json_cache.diag = true
-
-let sessions
-let pageviews
-let refresh = async () => {
- sessions = await json_cache.get('analytics/sessions.json', {})
- pageviews = await json_cache.get('analytics/pageviews.json', {})
-
- // a bit awkward... changing the exports on the fly
- exports.sessions = sessions
- exports.pageviews = pageviews
-}
-let sessions_dirty = () => json_cache.set('analytics/sessions.json')
-let pageviews_dirty = () => json_cache.set('analytics/pageviews.json')
-
-exports.json_cache = json_cache
-exports.sessions = sessions
-exports.pageviews = pageviews
-exports.refresh = refresh
-exports.sessions_dirty = sessions_dirty
-exports.pageviews_dirty = pageviews_dirty
let BuildCache = require('build_cache')
let fs = require('fs')
+let JSONCache = require('json_cache')
let jstemplate = require('jstemplate')
let less = require('less/lib/less-node')
var stream_buffers = require('stream-buffers')
let yauzl = require('yauzl')
let zetjs = require('zetjs')
+let fs_mkdir = util.promisify(fs.mkdir)
let fs_readFile = util.promisify(fs.readFile)
let yauzl_open = util.promisify(yauzl.open)
}
)
+// this is for read-only JSON files
+// they will be reloaded from disk if modified
let build_cache_json = new BuildCache()
let get_json = path => build_cache_json.get(
path,
}
)
+// this is for read/write JSON files
+// they will not be reloaded from disk if modified
+let try_mkdir = async path => {
+ try {
+ await fs_mkdir(path)
+ }
+ catch (err) {
+ if (err.code !== 'EEXIST') // should check error type
+ throw err
+ }
+}
+let json_cache = new JSONCache()
+json_cache.diag = true
+
exports.get_js = get_js
exports.get_json = get_json
exports.get_less = get_less
exports.get_text = get_text
exports.get_zip = get_zip
exports.get_zet = get_zet
+exports.try_mkdir = try_mkdir
+exports.json_cache = json_cache
-let analytics = require('./analytics')
let assert = require('assert')
let cookie = require('cookie')
let crypto = require('crypto')
config.mime_type_default
if (file_type == 'html') {
- await analytics.refresh()
+ let path_analytics = site_root + '/analytics'
+ let path_sessions = path_analytics + '/sessions.json'
+ let path_pageviews = path_analytics + '/pageviews.json'
+
+ await resources.try_mkdir(path_analytics)
+ let sessions = await resources.json_cache.get(path_sessions, {})
+ let pageviews = await resources.json_cache.get(path_pageviews, {})
- if (!analytics.sessions.hasOwnProperty(site)) {
- console.log('new site_sessions', site)
- analytics.sessions[site] = {}
- }
- let site_sessions = analytics.sessions[site]
let cookies = cookie.parse(req.headers.cookie || ''), session_key
if (
!cookies.hasOwnProperty('session_key') ||
- !site_sessions.hasOwnProperty(session_key = cookies.session_key)
+ !sessions.hasOwnProperty(session_key = cookies.session_key)
) {
session_key = crypto.randomBytes(16).toString('hex')
console.log('new session', session_key)
- site_sessions[session_key] = {}
+ sessions[session_key] = {pageviews: {}}
}
- let session = site_sessions[session_key]
+ let session = sessions[session_key]
let expires = new XDate()
expires.addMonths(1)
)
session.expires = expires
- if (!analytics.pageviews.hasOwnProperty(site)) {
- console.log('new site_pageviews', site)
- analytics.pageviews[site] = {}
- }
- let site_pageviews = analytics.pageviews[site]
- if (!site_pageviews.hasOwnProperty(page)) {
+ if (!pageviews.hasOwnProperty(page)) {
console.log('new pageview', page)
- site_pageviews[page] = {visits: 0, unique_visits: 0}
+ pageviews[page] = {}
}
- let pageview = site_pageviews[page]
+ let pageview = pageviews[page]
++pageview.visits;
- if (!session.hasOwnProperty('pageviews'))
- session.pageviews = {}
+ //if (!session.hasOwnProperty('pageviews'))
+ // session.pageviews = {}
let session_pageviews = session.pageviews
if (!session_pageviews.hasOwnProperty(page)) {
console.log('new session_pageview', page)
}
++session_pageviews[page]
- await analytics.sessions_dirty()
- await analytics.pageviews_dirty()
+ await resources.json_cache.set(path_sessions)
+ await resources.json_cache.set(path_pageviews)
}
if (dir_name_is_pub) {