Adds endpoints for listing all dataset metadata files in /data, and a metadata file...
authordsc <dsc@less.ly>
Fri, 24 Feb 2012 19:59:18 +0000 (11:59 -0800)
committerdsc <dsc@less.ly>
Fri, 24 Feb 2012 19:59:18 +0000 (11:59 -0800)
data/page_views_by_language.yaml [new file with mode: 0644]
lib/server/server.co

diff --git a/data/page_views_by_language.yaml b/data/page_views_by_language.yaml
new file mode 100644 (file)
index 0000000..724a59a
--- /dev/null
@@ -0,0 +1,18 @@
+id     : page_views_by_language
+name   : Pageviews by Language
+format : csv
+url    : /data/page_views_by_language.csv
+
+timespan :
+    start : 2008-01
+    end   : 2011-11
+    step  : 1mo
+
+columns :
+    labels : [ Month, Russian, All, English, German, French, Japanese, Spanish ]
+    types  : [ date,  int,     int, int,     int,    int,    int,      int     ]
+
+chart :
+    library : dygraphs
+    options : {}
+
index 2f7ff0d..1dded9e 100755 (executable)
@@ -5,6 +5,8 @@ path     = require 'path'
 {exec, spawn} = require 'child_process'
 
 _        = require 'underscore'
+Seq      = require 'seq'
+yaml     = require 'js-yaml'
 mime     = require 'mime'
 express  = require 'express'
 compiler = require 'connect-compiler-extras'
@@ -110,6 +112,40 @@ app.configure ->
 app.get '/', (req, res) ->
     res.render 'dashboard'
 
+
+YAML_EXT_PAT = /\.ya?ml$/i
+
+app.get '/data/list', (req, res, next) ->
+    fs.readdir "#CWD/data", (err, files) ->
+        res.send do
+            files.filter -> /\.(json|ya?ml)$/i.test it
+                 .map    -> "/data/#it".replace YAML_EXT_PAT, '.json'
+
+app.get '/data/all', (req, res, next) ->
+    data = {}
+    files = []
+    Seq()
+        .seq fs.readdir, "#CWD/data", Seq,
+        .flatten()
+        .filter -> /\.(json|ya?ml)$/.test it
+        .seq ->
+            files := @stack.slice()
+            @ok @stack
+        .parMap (f) -> fs.readFile "#CWD/data/#f", 'utf8', this
+        .parMap (text, i) ->
+            f = files[i]
+            k = f.replace YAML_EXT_PAT, '.json'
+            v = data[k] = {}
+            try
+                if YAML_EXT_PAT.test f
+                    v = data[k] = yaml.load text
+                else
+                    v = data[k] = JSON.parse text
+                @ok v
+            catch err
+                this err
+        .seq -> res.send data
+
 app.get '/:type/:action', (req, res, next) ->
     {type, action} = req.params
     if path.existsSync "#WWW/#type/#action.jade"