From 1b981b206ce608f0cea64471257c220d723b2808 Mon Sep 17 00:00:00 2001
From: Jonathan Bernard <jdbernard@gmail.com>
Date: Fri, 11 Mar 2011 15:08:18 +0000
Subject: [PATCH] Created timestamper_dev module, logging.

---
 src/timestamper.erl     |  1 +
 src/timestamper_dev.erl | 17 +++++++++++++++++
 src/ts_api.erl          | 32 ++++++++++++++++++++++----------
 src/ts_timeline.erl     |  2 +-
 4 files changed, 41 insertions(+), 11 deletions(-)
 create mode 100644 src/timestamper_dev.erl

diff --git a/src/timestamper.erl b/src/timestamper.erl
index 928a962..8e115ff 100644
--- a/src/timestamper.erl
+++ b/src/timestamper.erl
@@ -3,6 +3,7 @@
 
 start() ->
     ok = application:load(mnesia),
+    ok = application:set_env(mnesia, dir, "/usr/lib/yaws/mnesia"),
     ok = mnesia:start(),
     ok.
 
diff --git a/src/timestamper_dev.erl b/src/timestamper_dev.erl
new file mode 100644
index 0000000..5b6ede7
--- /dev/null
+++ b/src/timestamper_dev.erl
@@ -0,0 +1,17 @@
+-module(timestamper_dev).
+-export([start/0, create_tables/1]).
+
+start() ->
+    ok = application:load(mnesia),
+    ok = application:set_env(mnesia, dir, "/usr/lib/yaws"),
+    ok = mnesia:start(),
+    error_logger:info_report("TimeStampter app started."),
+    ok.
+
+create_tables(Nodes) ->
+    TableOpts = [{disc_copies, Nodes}],
+    {atomic, ok} = id_counter:create_table(TableOpts),
+    {atomic, ok} = ts_user:create_table(TableOpts),
+    {atomic, ok} = ts_timeline:create_table(TableOpts),
+    {atomic, ok} = ts_entry:create_table(TableOpts),
+    ok.
diff --git a/src/ts_api.erl b/src/ts_api.erl
index f54027b..e611147 100644
--- a/src/ts_api.erl
+++ b/src/ts_api.erl
@@ -21,8 +21,8 @@ out(YArg) ->
     case catch dispatch_request(YArg, Session, PathElements) of
         {'EXIT', Err} ->
             % TODO: log error internally
-            io:format("~p", [Err]),
-            make_json_500(YArg);
+            error_logger:error_report("TimeStamper: ~p", [Err]),
+            make_json_500(YArg, Err);
         Other -> Other
     end.
 
@@ -306,7 +306,9 @@ put_timeline(YArg, Username, TimelineId) ->
 
             {content, "application/json", JSONResponse};
 
-        _Error -> make_json_500(YArg)
+        Error -> 
+            error_logger:error_report("Unable to create a new timeline: ~p", [Error]),
+            make_json_500(YArg, Error)
     end.
 
 post_timeline(YArg, Username, TimelineId) ->
@@ -333,7 +335,9 @@ post_timeline(YArg, Username, TimelineId) ->
             [{status, "no such timeline"},
              {see_docs, "/ts_api_doc/timelines.html#POST"}]);
 
-        _Error -> make_json_500(YArg)
+        Error -> 
+            error_logger:error_report("Unable update timeline: ~p", [Error]),
+            make_json_500(YArg, Error)
     end.
 
 delete_timeline(_YArg, _Username, _TimelineId) -> {status, 405}.
@@ -458,8 +462,8 @@ put_entry(YArg, Username, TimelineId) ->
             {content, "application/json", JSONResponse};
 
         OtherError -> 
-            io:format("Could not create entry: ~p", [OtherError]),
-            make_json_500(YArg)
+            error_logger:error_report("TimeStamper: Could not create entry: ~p", [OtherError]),
+            make_json_500(YArg, OtherError)
     end.
 
 post_entry(YArg, Username, TimelineId, EntryId) -> 
@@ -479,7 +483,9 @@ post_entry(YArg, Username, TimelineId, EntryId) ->
         no_record -> make_json_404(YArg,
             [{status, "no such entry"}, {see_docs, "/ts_api_doc/entries.html#POST"}]);
 
-        _Error -> make_json_500(YArg)
+        Error -> 
+            error_logger:error_report("TimeStamper: Unable to update entry: ~p", [Error]),
+            make_json_500(YArg, Error)
     end.
 
 delete_entry(YArg, Username, TimelineId, EntryId) -> 
@@ -494,8 +500,8 @@ delete_entry(YArg, Username, TimelineId, EntryId) ->
             case ts_entry:delete(Record) of
                 ok -> {status, 200};
                 Error ->
-                    io:format("Error occurred deleting entry record: ~p", [Error]),
-                    make_json_500(YArg)
+                    error_logger:error_report("Error occurred deleting entry record: ~p", [Error]),
+                    make_json_500(YArg, Error)
             end
     end.
 
@@ -512,7 +518,7 @@ parse_json_body(YArg) ->
         {done, {ok, EJSON}, _} -> EJSON;
         Error ->
             % TODO: log error internally
-            io:format("~p", [Error]),
+            error_logger:error_report("Error parsing JSON request body: ~p", [Error]),
             throw(make_json_400(YArg))
     end.
 
@@ -577,6 +583,12 @@ make_json_405(YArg, Fields) ->
 
     [{status, 405}, {content, "application/json", json:encode({struct, F2})}].
 
+make_json_500(_YArg, Error) ->
+    EJSON = {struct, [
+        {status, "internal server error"},
+        {error, io_lib:format("~p", [Error])}]},
+    [{status, 500}, {content, "application/json", json:encode(EJSON)}].
+
 make_json_500(_YArg) ->
     EJSON = {struct, [
         {status, "internal server error"}]},
diff --git a/src/ts_timeline.erl b/src/ts_timeline.erl
index d02f6b1..cef41a4 100644
--- a/src/ts_timeline.erl
+++ b/src/ts_timeline.erl
@@ -11,7 +11,7 @@ create_table(TableOpts) ->
 
 new(TR = #ts_timeline{}) -> ts_common:new(TR).
 
-update(TR = #ts_timeline{}) -> ts_commone:update(TR).
+update(TR = #ts_timeline{}) -> ts_common:update(TR).
     
 lookup(Username, TimelineId) ->
     case mnesia:dirty_read(ts_timeline, {Username, TimelineId}) of