Change page.jst to use /database.logjson instead of /_analytics/*.json files
[ndcode_site.git] / page.jst
index caef8d3..106b253 100644 (file)
--- a/page.jst
+++ b/page.jst
@@ -6,28 +6,21 @@ return async (env, head, body, scripts) => {
   let favicons = await env.site.get_min_html('/_favicon/favicons.html')
   let globals = await env.site.get_json('/_config/globals.json')
 
-  await env.site.ensure_dir('/_analytics')
-  let sessions = await env.site.read_json('/_analytics/sessions.json', {})
-  let pageviews = await env.site.read_json('/_analytics/pageviews.json', {})
+  let transaction = env.site.database.Transaction()
+  let root = await transaction.get(transaction.LazyObject())
+  let sessions = await root.get('sessions', transaction.LazyObject())
+  let pageviews = await root.get('pageviews', transaction.LazyObject())
 
   let cookies = cookie.parse(env.request.headers.cookie || '')
-  let session_key
-  if (
-    !Object.prototype.hasOwnProperty.call(cookies, 'session_key') ||
-    !Object.prototype.hasOwnProperty.call(
-      sessions,
-      session_key = cookies.session_key
-    )
-  ) {
-    session_key = crypto.randomBytes(16).toString('hex')
-    console.log('new session', session_key)
-    sessions[session_key] = {pageviews: {}}
-  }
-  let session = sessions[session_key]
+  let session_key =
+    Object.prototype.hasOwnProperty.call(cookies, 'session_key') ?
+      cookies.session_key :
+      crypto.randomBytes(16).toString('hex')
+  let session = await sessions.get(session_key, transaction.LazyObject())
     
   let expires = new XDate()
   expires.addMonths(1)
-  session.expires = expires.toUTCString()
+  session.set('expires', expires.toUTCString())
   env.response.setHeader(
     'Set-Cookie',
     'session_key=' +
@@ -37,35 +30,30 @@ return async (env, head, body, scripts) => {
     '; path=/;'
   )
 
-  if (
-    !Object.prototype.hasOwnProperty.call(
-      pageviews,
-      env.parsed_url.pathname
-    )
-  ) {
-    console.log('new pageview', env.parsed_url.pathname)
-    pageviews[env.parsed_url.pathname] = {visits: 0, unique_visits: 0}
-  }
-  let pageview = pageviews[env.parsed_url.pathname]
-  ++pageview.visits;
+  let pageview = await pageviews.get(
+    env.parsed_url.pathname,
+    transaction.LazyObject()
+  )
+  pageview.set(
+    'visits',
+    (await pageview.get('visits') || 0) + 1
+  )
 
-  //if (!Object.prototype.hasOwnProperty.call(session, 'pageviews'))
-  //  session.pageviews = {}
-  let session_pageviews = session.pageviews
-  if (
-    !Object.prototype.hasOwnProperty.call(
-      session_pageviews,
-      env.parsed_url.pathname
+  let session_pageviews = await session.get(
+    'pageviews',
+    transaction.LazyObject()
+  )
+  let i = await session_pageviews.get(env.parsed_url.pathname)
+  if (i === undefined) {
+    pageview.set(
+      'unique_visits',
+      (await pageview.get('unique_visits') || 0) + 1
     )
-  ) {
-    console.log('new session_pageview', env.parsed_url.pathname)
-    session_pageviews[env.parsed_url.pathname] = 0
-    ++pageview.unique_visits
+    i = 0
   }
-  ++session_pageviews[env.parsed_url.pathname]
+  session_pageviews.set(env.parsed_url.pathname, i + 1)
 
-  env.site.write_json('/_analytics/sessions.json', sessions)
-  env.site.write_json('/_analytics/pageviews.json', pageviews)
+  await transaction.commit()
 
   let _out = []
   _out.push('<!DOCTYPE html>')