logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

[darcs #522] Darcs bug report: msg#00116

Subject: [darcs #522] Darcs bug report
Mon Sep 19 08:08:18 2005: New ticket: 522.
Transaction: Ticket created by jakob@xxxxxxxxxx
       Queue: Darcs
     Subject: Darcs bug report
       Owner: Nobody
  Requestors: jakob@xxxxxxxxxx
      Status: new
 Ticket <URL: http://bugs.darcs.net/.//Ticket/Display.html?id=522 >

{
{
[Wiki Databus plugin supports adding extra columns with "onclick" capabilities 
(first draft).
stoffer@xxxxx*-20050916160010] {
hunk ./www/tte.css 66
-td[valueType="clickme"] {
-       font-family: Verdana, Arial, Helvetica, sans-serif;
-       font-size: 16px;
-       color: #333333;
-       font-weight: bolder;
-        text-align: center;
-}
hunk ./www/sajax.js 1224
-}
-
-/************************************************************\
-*
-\************************************************************/
-function ajax_row_to_nvplist(tr,id_thead) {
-       if (!tr) { return "[]"};
-       if (!tr.cells) { return "[]"};
-
-       thead = document.getElementById(id_thead);
-
-       var vp="[";
-       for (i=0; i<tr.cells.length; i++) {
-               if (vp != "[") vp += ",";
-               vp += "{'" + ajax_table_columns[thead.rows[0].cells[i].id].name 
+ "',\"" + tr.cells[i].innerHTML.toString().replace(/\"/g,"\\\"") + "\"}";
-       }
-       vp += "]";
-       //alert(vp);
-       return vp;
hunk ./www/sajax.js 1185
-function store_in_popup() {
-       return function(result,status) { if (result) alert(result); };
-}
-
-/************************************************************\
-*
-\************************************************************/
hunk ./www/sajax.js 1118
-                               ajax_setColumnValue(tr, col, id, value, 
'clickme', true);
+                               ajax_setColumnValue(tr, col, id, value, 
numValue, true);
hunk ./www/sajax.js 1114
-                                       //if (isNaN(pos)) pos = 0;
-                                       col = ajax_init_new_column(auto, tbody, 
thead, tfoot, pos, colId, name, value, sumObjList);
+                                       col = ajax_init_new_column(auto, tbody, 
thead, colId, name, value, sumObjList);
hunk ./www/sajax.js 1112
-
hunk ./www/sajax.js 1107
+
hunk ./www/sajax.js 1104
-                                var name = id;
hunk ./www/sajax.js 1101
-                       var pos = parseInt(colData[j]["pos"]);
-                       if (!id && ln) id = ln;
hunk ./www/sajax.js 1099
-                       var ln = colData[j]["link"];
hunk ./www/sajax.js 1067
-                                               tid = 
setTimeout("ajax_resetcolor('" + tr.id + "','" + colId + "','black')", 
ajax_color_msec);
+                                               tid = 
setTimeout("ajax_resetcolor('" + tr.id + "'," + col.cellIndex + ",'black')", 
ajax_color_msec);
hunk ./www/sajax.js 1006
-                               col = ajax_init_new_column(auto, tbody, thead, 
tfoot, null, colId, name, value, sumObjList);
+                               col = ajax_init_new_column(auto, tbody, thead, 
colId, name, value, sumObjList);
hunk ./www/sajax.js 892
-
+               ajax_adjustRowCells(tbody, thead.rows[0].cells.length);
hunk ./www/sajax.js 867
-                var len = thead.rows[0].cells.length;
-               if (isNaN(pos)) pos = len;
-               if (pos > len) pos = len;
-               if (pos < 0) pos = 0;
-               if (pos < len) {
-                       // reposition columns
-                       for (var colid in ajax_table_columns) {
-                               var col = ajax_table_columns[colid];
-                               if (col.cellIndex>=pos) col.cellIndex += 1;
-                       }
-                       // reposition sum footer columns
-                       if (tfoot) {
-                               var fpos = pos>0?pos:1;
-                               for (fr=1; fr<tfoot.rows.length; fr++)
-                                       tfoot.rows[fr].insertCell(fpos);
-                       }
-               }
-               // reposition table body
-               if (tbody) {
-                       for (br=0; br<tbody.rows.length; br++)
-                               tbody.rows[br].insertCell(pos);
-               }
-               c = thead.rows[0].insertCell(pos);
+               c = thead.rows[0].insertCell(thead.rows[0].cells.length);
hunk ./www/sajax.js 831
-       var pos = parseInt(position);
hunk ./www/sajax.js 829
-function ajax_init_new_column(auto, tbody, thead, tfoot, position, colId, 
name, value, sumObjList) {
+function ajax_init_new_column(auto, tbody, thead, colId, name, value, 
sumObjList) {
hunk ./www/sajax.js 826
-       var pattern = 
/^timestamp$|^instrument$|^date$|^time$|.+\.date$|.+\.code$|.+\.id$/i
+       var pattern = 
/^timestamp$|^instrument$|^date$|^time$|.+\.date$|.+\.code$/i
hunk ./www/sajax.js 499
-       } else {
-               td.setAttribute("valueType",null);
-        }
+       }
hunk ./www/sajax.js 495
-       } else if (isNaN(numValue) && numValue) {
-               td.setAttribute("valueType",numValue);
-       } else if (!isNaN(numValue)) {
+       } else {
hunk ./www/sajax.js 493
-       if (col.cn) {
+       if (isNaN(numValue) || col.cn) {
hunk ./www/sajax.js 456
-               var col = ajax_table_columns[colId];
-               
document.getElementById(row_id).cells[col.cellIndex].removeAttribute("colorCode");
+               
document.getElementById(row_id).cells[cellIndex].removeAttribute("colorCode");
hunk ./www/sajax.js 454
-function ajax_resetcolor(row_id, colId, resetColor) {
+function ajax_resetcolor(row_id, cellIndex, resetColor) {
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 172
-    "    wdb_ref_" ++ UID ++ " = 
erlang_function('dbget',store_in_table('wdb_tbody_" ++ UID ++ "','wdb_thead_" 
++ UID ++ "','wdb_tfoot_" ++ UID ++ "','" ++ Sort ++ "',auto,'t" ++ UID ++ 
"',[" ++ Keylist ++ "]," ++ AddcolList ++ "," ++ Sumlist ++ "),'" ++ Bufsiz ++ 
"',Q);\n"
+    "    wdb_ref_" ++ UID ++ " = 
erlang_function('dbget',store_in_table('wdb_tbody_" ++ UID ++ "','wdb_thead_" 
++ UID ++ "','wdb_tfoot_" ++ UID ++ "','" ++ Sort ++ "',auto,'t" ++ UID ++ 
"',[" ++ Keylist ++ "],[]," ++ Sumlist ++ "),'" ++ Bufsiz ++ "',Q);\n"
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 161
-    "function wdb_f_" ++ UID ++ "_action (n,f,a) {\n" ++
-    "  var R = ajax_row_to_nvplist(ajax_getParent(n,\"tr\"),\"wdb_thead_" ++ 
UID ++ "\");\n" ++
-    "  if (a) erlang_function(f,store_in_popup(),R,a); else 
erlang_function(f,store_in_popup(),R);\n" ++
-    "}\n" ++
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 126
-    
logger:info(?MODULE,sum.list,[{sumcols,Sumcols},{sumfuncs,Funclist},{json,Sumlist}]),
-
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 75
-    AddcolList = json:encode(
-                       lists:map(
-                           fun(E) when E /= [] ->
-                               L = scanNparse(E),
-                               json:object(erlang:list_to_tuple(
-                                   lists:foldl(
-                                       fun({link,Link,Fun},Acc) -> 
-                                              [
-                                                json:object(
-                                                        json:string(js),
-                                                        json:string("'<div " ++
-                                                             
"onclick=\"wdb_f_"++UID++"_action(this,\\'wiki_"++to_str(Fun)++"\\')\">" ++
-                                                             
to_str(Link)++"</div>';")),
-                                                json:object(json:string(link), 
json:string(Link))
-                                              | Acc];
-                                          ({link,Link,Fun,Arg},Acc) -> 
-                                              [
-                                                json:object(
-                                                        json:string(js),
-                                                        json:string("'<div " ++
-                                                             
"onclick=\"wdb_f_"++UID++"_action(this,\\'wiki_"++to_str(Fun)++"\\',\\'"++to_str(Arg)++"\\')\">"
 ++
-                                                             
to_str(Link)++"</div>';")),
-                                                json:object(json:string(link), 
json:string(Link))
-                                              | Acc];
-                                          ({N,V},Acc) -> 
-                                              [json:object(json:string(N), 
json:string(V)) | Acc];
-                                          (_,Acc) -> Acc
-                                       end, [], L)));
-                              ([]) -> ""
-                           end, Addcols)),
-
-    if AddcolList /= [] -> 
logger:info(?MODULE,addcollist,[{json,AddcolList}]); true -> ok end,
-
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 58
-    Addcols = lists:usort(list_arg("addcol",ArgList)),
-
-    logger:info(?MODULE,addcols,[{list,Addcols}]),
-
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 26
-scanNparse(Str) ->
-    EndStr = case string:right(Str,1) of "." -> Str; _ -> Str++"." end,
-    case catch erl_scan:string(EndStr) of
-        {ok, Tokens, _} ->
-           case catch erl_parse:parse_term(Tokens) of
-               {ok, Terms} -> Terms;
-               _ -> []
-           end;
-        _ -> []
-    end.
-
-to_str(X) when is_atom(X) -> atom_to_list(X);
-to_str(X) when is_list(X) -> X;
-to_str(X) -> lists:flatten(io_lib:format("~p",[X])).
-
hunk ./lib/webconsole/src/ajax_databus.erl 223
-    dbclient:send(Ref, {BA, [{basket.id, {'#S',StrBasketId}}] }),
+    dbclient:send(Ref, { 'accept.basket', { '#S' , StrBasketId } }),
+    dbclient:send(Ref, 'eof'),
+    dbclient:close(Ref),
+    [].
+
+basket_recalc(StrBasketId) ->
+    {ok, Ref} = dbMakeRequest({put, [{datasrc, commands}]}),
+    dbclient:send(Ref, { 'recalc.basket', { '#S' , StrBasketId } }),
hunk ./lib/webconsole/src/ajax_databus.erl 218
-basket(Action,StrBasketId) when is_list(Action) ->
-    basket(list_to_atom(Action),StrBasketId);
-basket(Action,StrBasketId) when is_atom(Action) ->
-    BA = list_to_atom(atom_to_list(Action) ++ ".basket"),
+basket_go(StrBasketId) ->
hunk ./lib/webconsole/src/ajax_databus.erl 5
--export([basketlist/0, basket/2]).
+-export([basketlist/0, basket_go/1, basket_recalc/1]).
hunk ./lib/webconsole/src/ajax.erl 245
-%%@private
hunk ./lib/webconsole/src/ajax.erl 242
-%%@private
hunk ./lib/webconsole/src/ajax.erl 239
-%%@private
hunk ./lib/webconsole/src/ajax.erl 236
-%%@private
hunk ./lib/webconsole/src/ajax.erl 204
-scanNparse(Str) ->
-    EndStr = case string:right(Str,1) of "." -> Str; _ -> Str++"." end,
-    case erl_scan:string(EndStr) of
+scanNparse(StrRequest) ->
+    case erl_scan:string(StrRequest) of
hunk ./lib/webconsole/src/ajax.erl 148
+
+basket_go (StrBasketId) ->
+    ajax_databus:basket_go(StrBasketId),
+    {ok, {stop, []}}.
+
+basket_recalc (StrBasketId) ->
+    ajax_databus:basket_recalc(StrBasketId),
+    {ok, {stop, []}}.
+
+sasl_log () ->
+    L = os:cmd("bin/log"),
+    {ok, {stop, ?S(L)}}.
hunk ./lib/webconsole/src/ajax.erl 76
-
-%% 
------------------------------------------------------------------------------------
-%%
-%% 
------------------------------------------------------------------------------------
hunk ./lib/webconsole/src/ajax.erl 44
-%% Special Wiki Databus plugin callback functions, all prefixed with wiki_
-%% 
------------------------------------------------------------------------------------
-
-wiki_hello(StrNamedValuePair) ->
-    {ok, {stop, ?S("Hello!\n\n" ++ StrNamedValuePair)}}.
-
-wiki_basket(StrNamedValuePair,StrBasketAction) ->
-    {ok,Args} = scanNparse(StrNamedValuePair),
-    StrBasketId = get_nv('basket.id',Args),
-    ajax_databus:basket(StrBasketAction,StrBasketId),
-    {ok, {stop, ?S("Basket id: " ++ StrBasketId ++ ", Action: " ++ 
StrBasketAction ++ " - OK.")}}.
-
-get_nv(Name, [{Name,Value}|_T]) -> Value;
-get_nv(Name, [_H|T]) -> get_nv(Name,T);
-get_nv(_Name, []) -> [].
-
-%% 
------------------------------------------------------------------------------------
-%% Small simple test functions
+%%
hunk ./lib/webconsole/src/ajax.erl 32
+-export([sasl_log/0]).
+
hunk ./lib/webconsole/src/ajax.erl 27
--export([basketlist/0, basketlist/1]).
+-export([basketlist/0, basketlist/1, basket_go/1, basket_recalc/1]).
hunk ./lib/webconsole/src/ajax.erl 21
--export([wiki_hello/1]).
--export([wiki_basket/2]).
-
hunk ./lib/webconsole/src/ajax.erl 1
-%%@doc AJAX Callback Module.
-%%
-%% <p>This module defines ajax callback functions.</p>
-%% <p>All functions exported from this module can be
-%% called from a web/wiki page.</p>
-%% <p>All exported functions in this modules
-%% is called by {@link ajaxreq:handle_client_request/1}
-%% and function arguments are all strings</p>
-%% <p>All exported functions should return one of<ul>
-%% <li>@{ok, @{stop, ReturnValue@}@}</li>
-%% <li>@{ok, @{continue, ReturnValue, NameOfNewFunction, 
ListOfArguments@}@}<dt>Bla bla</dt></li>
-%% <li>... more to come ...</li>
-%% </ul>The return value, ReturnValue, is {@link json:encode/1. JSON encoded}
-%% by the calling function {@link ajaxreq:handle_client_request/1} and then
-%% returned to the webpage.</p>
-%%@end
-
}
[changed a few internal debugs into logger:info regarding subscribe/unsubscribe
stoffer@xxxxx*-20050916075857] {
hunk ./lib/reuter/src/e_src/reuter_subscribe.erl 434
-    logger:info(?MODULE, unsubscribe, [{instrument,Instrument}]),
+    debug("~p: unsubscribing reuters for instrument ~p~n",
+                                   [?MODULE, Instrument]),
hunk ./lib/reuter/src/e_src/reuter_subscribe.erl 430
-    logger:info(?MODULE, subscribe, [{instrument,Instrument}]),
+    debug("~p: subscribing reuters for instrument ~p~n",
+                                 [?MODULE, Instrument]),
hunk ./lib/reuter/src/e_src/reuter.erl 114
-            logger:info(?MODULE,stop),
hunk ./lib/reuter/src/e_src/reuter.erl 110
-            logger:info(?MODULE,call.received,[{caller,_Caller},{msg,Msg}]),
}
[catch ubf encoder errors in our logger (logger more crash safe).
stoffer@xxxxx*-20050915092420] {
hunk ./lib/manager/src/logger.erl 218
-    to_str(X,"~p").
-to_str(X,Format) ->
-    lists:flatten(io_lib:format(Format, [X])).
+    lists:flatten(io_lib:format("~p", [X])).
hunk ./lib/manager/src/logger.erl 196
-            catch snmpTrap(Errtype, Errmsg, State#state.node),
-            UbfErrmsg = case catch ubf:encode_deep(Errmsg) of
-                {'EXIT',_Reason} ->
-                    NewErrmsg = 
{Timestamp,failed.to.ubf.encode,[{reason,{'#S',to_str(_Reason,"~w")}},{value,{'#S',to_str(Errmsg,"~w")}}]},
-                    catch snmpTrap(warning, NewErrmsg, State#state.node),
-                    ubf:encode_deep(NewErrmsg);
-                Ubf -> Ubf
-            end,
-           case file:write(NewState#state.iodev, [UbfErrmsg,$\n]) of
+            snmpTrap(Errtype, Errmsg, State#state.node),
+           case file:write(NewState#state.iodev, 
[ubf:encode_deep(Errmsg),$\n]) of
}
}
{
addfile ./doc/control_structure.html
hunk ./doc/control_structure.html 1
-
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
+<html>
+<head>
+<title>Control structure</title>
+</head>
+<body>
+
+<h2>Control channel</h2>
+<p>The control channel is a data source in the DataBus used for exchanging 
commands between components.
+All commands are transferred on the same channel, so it works like a 
blackboard more than a point-to-point channel.
+This has the advantage that it is a lot easier to set up during initialisation 
and that more than one can
+receive the same command, if so desired.</p>
+
+<h3>Commands</h3>
+<dl>
+<dt><pre>{Timestamp, refresh-basket, [{basketid,BasketID}]}</pre></dt>
+       <dd>Requests an updated version of a basket</dd>
+<dt><pre>{Timestamp, verify-basket, [{basketid,BasketID}]}</pre></dt>
+       <dd>Instruct external guardian (or someone else) to verify a basket and 
return ok or error</dd>
+<dt><pre>{Timestamp, approve-basket, [{basketid,BasketID}]}</pre></dt>
+       <dd>The basket with the given id is approved and execution may begin. 
It is acceptable for the execution engine
+       to have the restriction that only the latest basket can be 
approved.</dd>
+<dt><pre>{Timestamp, halt-basket, [{basketid,BasketID}]}</pre></dt>
+       <dd>Stop executing the given basket.</dd>
+</dl>
+
+<h3>Responses</h3>
+
+<p>Status for commands are returned via the same data source.</p>
+<ul>
+       <li><pre>{basket-ok, BasketID}</pre></li>
+       <li><pre>{basket-error, BasketID, Reason}</pre></li>
+       <li><pre>{basket-executing, BasketID}</pre></li>
+       <li><pre>{basket-halted, BasketID, Reason}</pre></li>
+</ul>
+
+<p>In order to make it easier to match responses to orders, we really should 
introduce a command id.
+The root cause for this need is that we communicate via DataBus, which is an 
asynchronous streaming engine,
+not an RPC mechanism.</p>
+
+<p>Note: Philosophically, what we really want is to send a request backwards 
through baskets datasource to
+supply an updated copy instead of sending it on a separate commands channel. 
However, we leave this for a
+later implementation</p>
+
+<h2>Baskets</h2>
+<p>Baskets are submitted via the "basket" datasource using BasketFormat.</p>
+
+<p>The current orders file contain one line per instrument, and the entire 
file constitutes one basket.
+However, when we move to the databus, there will be many baskets per file (or 
data channel) so we need
+a way to separate baskets. The proposed solution is:</p>
+
+<ul>
+       <li>There will still be one line per instrument (due to limitations in 
StrategyEngine)</li>
+       <li>The lines will be tied together through a basket id which will be 
added as a topic on each line</li>
+       <li>The time generated (or more precisely: the time up to which data 
has been used to gernerate this line)
+       is added as a time stamp as a topic</li>
+       <li>StrategyEngine no longer generates the current timestamp, the 
DataBus does</li>
+       <li>DataBus introduces new begin/end transaction markers, time stamps 
all rows within markers with the
+       same time stamp, and sends quiet time marker (= end of block) after the 
last line.</li>
+       <li>Strategy engine sends begin and end markers.</li>
+</ul>
+
+<p>The upside of this solution is that it requires quite small changes to 
?StrategyEngine.</p>
+
+<p>The flip side is that we have to implement bundling and quiet time markers 
in DataBus although they are
+not yet needed for anything else.</p>
+
+</body>
+</html>
hunk ./doc/startup_sequence.html 75
-       <td style="text-indent: 20; ">reuter_realtime</td>
+       <td style="text-indent: 20; ">reuter_realtime(slave)</td>
hunk ./doc/startup_sequence.html 82
-       <td>buhlam</td>
+       <td>reuter</td>
hunk ./doc/startup_sequence.html 85
-       <td>Event handler</td>
+       <td>Event handler added to reuter_realtime gen_event server on node 
reuters.</td>
hunk ./doc/startup_sequence.html 107
-       <td style="text-indent: 40; ">reuter_realtime</td>
+       <td style="text-indent: 40; ">reuter_realtime(master)</td>
hunk ./doc/startup_sequence.html 114
-       <td style="text-indent: 60; ">{reuter_realtime,master}</td>
+       <td style="text-indent: 60; ">{reuter_realtime,slave}</td>
hunk ./doc/startup_sequence.html 118
-       <td>Added by reuter_realtime on node buhlam</td>
+       <td>Event handler added by reuter_realtime(slave) on node buhlam. 
Notifies reuter_realtime on node buhlam about all events on reuter_realtime on 
node reuters.</td>
hunk ./doc/startup_sequence.html 157
-       <td>Add event handler</td>
+       <td>Add event handler and two processes. Monitors the realtime feed for 
price changes and writes these to both mnesia and the realtime file. One 
process writes to mnesia, the other to realtime file.</td>
hunk ./doc/startup_sequence.html 164
-       <td>Add event handler</td>
+       <td>Add event handler. Logs to the log file for the node all messages 
that are not price changes.</td>
hunk ./doc/startup_sequence.html 171
-       <td>Add event handler</td>
+       <td>Add event handler. For every hour it logs to the statics file a 
list of symbols seen.</td>
hunk ./doc/startup_sequence.html 178
-       <td>Add event handler</td>
+       <td>Add event handler. Monitors for messages about instruments becoming 
inactive, then automatically resubscribes.</td>
hunk ./lib/buhlam/src/priceChange.erl 7
--export([start/3]).
+-export([writeDb/0, writeFile/1]).
+-export([start/2]).
hunk ./lib/buhlam/src/priceChange.erl 11
--record(state, {changeKeys, selectKeys, io, table, last}).
+-record(state, {selectKeys, pidm, pidf, last}).
hunk ./lib/buhlam/src/priceChange.erl 13
-start(ChangeKeys, SelectKeys, IoDevice) ->
+%@doc Starts the priceChange monitor. "SelectKeys" lists the keys in the
+%event to look for. "IoDevice" is the file to write events to.
+%
+% If any of the price change processes crash and restart, they leave the old
+% handler around together with the new one. However, it doesn't really mean
+% anything as they just send messages to a non-existing process.
+
+start(SelectKeys=[Sym|_], IoDevice) ->
+    PIDM = spawn_link(?MODULE,writeDb,[]),
+    PIDF = spawn_link(?MODULE,writeFile,[IoDevice]),
hunk ./lib/buhlam/src/priceChange.erl 24
-                         {?MODULE, self()}, 
-                         #state{changeKeys=ChangeKeys,
-                                selectKeys=SelectKeys,
-                                io=IoDevice,
+                         {?MODULE, Sym},
+                         #state{selectKeys=SelectKeys,
+                                pidm=PIDM,
+                                pidf=PIDF,
hunk ./lib/buhlam/src/priceChange.erl 42
-writeDb(InstEv) ->
-    F = fun () ->
-               case mnesia:read({fieldValue, 
InstEv#instrumentEvent.instrument}) of
-                   [] ->
-                       Fields = InstEv#instrumentEvent.info;
-                   [Record] ->
-                       Fields = listCombine(InstEv#instrumentEvent.info,
-                                            Record#fieldValue.value)
+%@doc Process to write price changes to mnesia
+writeDb() ->
+    testutil:reg("priceChange"),
+    writeDb_loop().
+
+
+writeDb_loop() ->
+    receive
+       stop ->
+           ok;
+       InstEv ->
+           F = fun () ->
+                       case mnesia:read({fieldValue, 
InstEv#instrumentEvent.instrument}) of
+                           [] ->
+                               Fields = InstEv#instrumentEvent.info;
+                           [Record] ->
+                               Fields = 
listCombine(InstEv#instrumentEvent.info,
+                                                    Record#fieldValue.value)
+                       end,
+                       
mnesia:write(#fieldValue{key=InstEv#instrumentEvent.instrument,
+                                                value=Fields})
hunk ./lib/buhlam/src/priceChange.erl 64
-               mnesia:write(#fieldValue{key=InstEv#instrumentEvent.instrument,
-                                        value=Fields})
-       end,
-    case mnesia:transaction(F) of
-       {atomic, _} ->
+           case mnesia:transaction(F) of
+               {atomic, _} ->
+                   ok;
+               {aborted, Reason} ->
+                   logger:error(?MODULE, mnesia.transaction, 
[{function,writeDb},{reason,Reason}])
+           end
+    end,
+    writeDb_loop().
+
+writeFile(IoDevice) ->
+    testutil:reg("priceChange"),
+    writeFile_loop(IoDevice).
+
+writeFile_loop(IoDevice) ->
+    receive
+       stop ->
hunk ./lib/buhlam/src/priceChange.erl 81
-       {aborted, Reason} ->
-           logger:error(?MODULE, mnesia.transaction, 
[{function,writeDb},{reason,Reason}]),
-           aborted
-    end.
+       InstEv ->
+           file:write(IoDevice, [ubf:encode_deep(
+                                   
reuter_writer:eventConvert({InstEv#instrumentEvent.time,
+                                                               
InstEv#instrumentEvent.instrument,
+                                                               
InstEv#instrumentEvent.info})), $\n])
+    end,
+    writeFile_loop(IoDevice).
hunk ./lib/buhlam/src/priceChange.erl 89
-writeFile(InstEv, IoDevice) ->
-    file:write(IoDevice, [ubf:encode(
-                           
reuter_writer:eventConvert({InstEv#instrumentEvent.time,
-                                                       
InstEv#instrumentEvent.instrument,
-                                                       
InstEv#instrumentEvent.info})), $\n]).
hunk ./lib/buhlam/src/priceChange.erl 90
-doStuff({_EventType,Symbol, _Text, Timestamp, Fields},SelectKeys,IoDevice) ->
-    InstEv = #instrumentEvent{instrument=Symbol,
-                             time=Timestamp,
-                             info=select(Fields, SelectKeys)},
-    writeDb(InstEv),
-    writeFile(InstEv, IoDevice),
-    ok.
hunk ./lib/buhlam/src/priceChange.erl 97
-handle_event({EventType,Symbol, Text, Timestamp, Fields}, State) ->
-    Start = now(),
+handle_event({_EventType, Symbol, _Text, Timestamp, Fields}, State) ->
hunk ./lib/buhlam/src/priceChange.erl 99
-    Newstate =
hunk ./lib/buhlam/src/priceChange.erl 104
-           {doStuff({EventType,Symbol, Text, Timestamp, Fields},
-                    State#state.selectKeys,
-                    State#state.io),
-            
State#state{last=dict:store(Symbol,SelectedFields,State#state.last)}}
-    end,
-    realtime_monitor:check_running_time(?MODULE, Start),
-    Newstate;
+           InstEv = #instrumentEvent{instrument=Symbol,
+                                     time=Timestamp,
+                                     info=SelectedFields},
+           State#state.pidm ! InstEv,
+           State#state.pidf ! InstEv,
+           {ok, 
State#state{last=dict:store(Symbol,SelectedFields,State#state.last)}}
+    end;
hunk ./lib/buhlam/src/priceChange.erl 142
-    start(['ASK','BID'],['ASK','BID'], File).
+    start(['ASK','BID'], File).
hunk ./lib/buhlam/src/realtime_handlers.erl 25
-                     
['BID','ASK','BIDSIZE','ASKSIZE','NO_ASKMMKR','NO_BIDMMKR'],
hunk ./lib/buhlam/src/realtime_handlers.erl 28
-                     ['NUM_MOVES','TRDPRC_1','ACVOL_1','TRDVOL_1'],
hunk ./lib/buhlam/src/realtime_monitor.erl 42
-    spawn_link(?MODULE, realtime_monitor, []),
-    {ok, nil}.
+    {ok, spawn_link(?MODULE, realtime_monitor, [])}.
hunk ./lib/buhlam/src/realtime_monitor.erl 45
-    ?MODULE ! Event,
+    %% State contains PID of monitor process
+    State ! Event,
hunk ./lib/buhlam/src/realtime_monitor.erl 137
-       Runningtime when Runningtime > 200 ->
+       Runningtime when Runningtime > 0 ->
hunk ./lib/buhlam/src/reuterlog.erl 24
-    logger:error(reuter, stale, 
[{symbol,Symbol},{text,Text},{timestamp,Timestamp}]),
+    {_, Time} = calendar:universal_time(),
+    if
+       {7,0,0} =< Time, Time =< {18,0,0} ->
+           Type = error;
+       true ->
+           Type = warning
+    end,
+    logger:log(Type, reuter, stale, 
[{symbol,Symbol},{text,Text},{timestamp,Timestamp}]),
hunk ./lib/buhlam/src/sample.erl 87
+-define(Jan1_2005,{1104,537600,0}).
+
hunk ./lib/buhlam/src/sample.erl 92
-dbquery("realtime", StartTime, EndTime) ->
-    [get, {datasrc,realtime},
+dbquery("realtime-trades", StartTime, EndTime) ->
+    [get, {datasrc,"realtime"},
hunk ./lib/buhlam/src/sample.erl 96
+          {where, isnotmissing, 'TRDPRC_1'},
hunk ./lib/buhlam/src/sample.erl 98
-             {'ACVOL_1',close}, {'ASK',close}, {'ASK',dwap}, {'TRDPRC_1', 
close}, {'BID',close},{'BID',dwap},
-              {grid, {hours,1}}}
+             [close,'TRDPRC_1','realtime.trade.close'],
+             [sum,'TRDVOL_1','realtime.trade.volume'],
+             [high,'TRDPRC_1','realtime.trade.high'],
+             [low,'TRDPRC_1','realtime.trade.low'],
+             [[wavr,'TRDPRC_1','QTITTRAN'],'realtime.trade.vwap'],
+             [open,'TRDPRC_1','realtime.trade.open'],
+             [close,time,'realtime.trade.close.time'],
+             [open,time,'realtime.trade.open.time'],
+             [count,'TRDPRC_1','realtime.trade.count'],
+             {grid, {hours,1}}}
hunk ./lib/buhlam/src/sample.erl 110
+dbquery("realtime-quotes", StartTime, EndTime) ->
+    [get, {datasrc,"realtime"},
+          {interval,StartTime, EndTime},
+          {symbols,all},
+          {where, isnotmissing, 'BID'},
+          {select,
+             {grid, {hours,1}},
+             [open,time,'realtime.quote.open.time'],
+             [close,'BIDSIZE','realtime.quote.close.bid.size'],
+             [close,'NO_BIDMMKR', 'realtime.quote.close.bid.number'],
+             [close,'BID','realtime.quote.close.bid'],
+             [close,'ASKSIZE','realtime.quote.close.ask.size'],
+             [close,'NO_ASKMMKR', 'realtime.quote.close.ask.number'],
+             [close,'ASK','realtime.quote.close.ask'],
+             
[[mid,'realtime.quote.close.bid','realtime.quote.close.ask'],'realtime.quote.close.mid'],
+             [close,time,'realtime.quote.close.time'],
+             [count,'BID','realtime.quote.count'],
+             [dwap,'BID','realtime.quote.dwap.bid'],
+             [dwap,'ASK','realtime.quote.dwap.ask']
+         }];
hunk ./lib/buhlam/src/sample.erl 131
+
hunk ./lib/buhlam/src/sample.erl 136
-% bdm1d2
-dbquery(Datasrc = [$b,$d,$m,$1,$d,$2|_], StartTime, EndTime) ->
-    [get, {datasrc,Datasrc},
+% trades (bdm1d2 files, before Jan 1, 2005)
+dbquery([$t,$r,$a,$d,$e,$s|Datasrc], StartTime, EndTime) when EndTime =< 
?Jan1_2005 ->
+    [get, {datasrc,"bdm1d2" ++ Datasrc},
hunk ./lib/buhlam/src/sample.erl 144
-             {close,'PTRAN'}, {sum,'QTITTRAN'}, {high,'PTRAN'}, {low,'PTRAN'}, 
{open,'PTRAN'}, {count,'PTRAN'},
+             [close,'PTRAN',trade.close],
+             [sum,'QTITTRAN',trade.volume],
+             [high,'PTRAN',trade.high],
+             [low,'PTRAN',trade.low],
+             [[wavr,'PTRAN','QTITTRAN'],trade.vwap],
+             [open,'PTRAN',trade.open],
+             [close,time,'trade.close.time'],
+             [open,time,'trade.open.time'],
+             [count,'PTRAN',trade.count],
hunk ./lib/buhlam/src/sample.erl 156
-% trades
-dbquery(Datasrc = [$t,$r,$a,$d,$e,$s|_], StartTime, EndTime) ->
+% trades (after Jan 1, 2005)
+dbquery(Datasrc = [$t,$r,$a,$d,$e,$s|_], StartTime, EndTime) when StartTime >= 
?Jan1_2005 ->
hunk ./lib/buhlam/src/sample.erl 164
-             {close,price},
-             {sum,volume},
-             {high,price},
-             {low,price},
-             {open,price},
-             {count,price},
+             [close,price,trade.close],
+             [sum,volume,trade.volume],
+             [high,price,trade.high],
+             [low,price,trade.low],
+             [[wavr,price,volume],trade.vwap],
+             [open,price,trade.open],
+             [close,time,'trade.close.time'],
+             [open,time,'trade.open.time'],
+             [count,price,trade.count],
hunk ./lib/buhlam/src/sample.erl 176
-% bdm2d2
-dbquery(Datasrc = [$b,$d,$m,$2,$d,$2|_], StartTime, EndTime) ->
-    [get, {datasrc,Datasrc},
+% crosses (bdm1d2 files, before Jan 1, 2005)
+dbquery([$c,$r,$o,$s,$s,$e,$s|Datasrc], StartTime, EndTime) when EndTime =< 
?Jan1_2005 ->
+    [get, {datasrc,"bdm1d2" ++ Datasrc},
+          {interval,StartTime, EndTime},
+          {symbols,all},
+          {where, 'and', {is_businessday, time},
+                        {'>', 'ITRANYAP', 0}},
+          {select,
+             [close,'PTRAN',trade.close],
+             [sum,'QTITTRAN',trade.volume],
+             [high,'PTRAN',trade.high],
+             [low,'PTRAN',trade.low],
+             [[wavr,'PTRAN','QTITTRAN'],trade.vwap],
+             [open,'PTRAN',trade.open],
+             [close,time,'trade.close.time'],
+             [open,time,'trade.open.time'],
+             [count,'PTRAN',trade.count],
+             {grid, {hours,1}}}
+    ];
+
+% crosses (trades files, after Jan 1, 2005)
+dbquery([$c,$r,$o,$s,$s,$e,$s|Datasrc], StartTime, EndTime) when StartTime >= 
?Jan1_2005 ->
+    [get, {datasrc,"trades" ++ Datasrc},
+          {interval,StartTime, EndTime},
+          {symbols,all},
+          {where, 'and', {is_businessday, time},
+                        {'>', 'cross.trade.indicator', 0}},
+          {select,
+             [close,price,trade.close],
+             [sum,volume,trade.volume],
+             [high,price,trade.high],
+             [low,price,trade.low],
+             [[wavr,price,volume],trade.vwap],
+             [open,price,trade.open],
+             [close,time,'trade.close.time'],
+             [open,time,'trade.open.time'],
+             [count,price,trade.count],
+             {grid, {hours,1}}}
+    ];
+
+% quotes (bdm2d2 files, before Jan 1, 2005)
+dbquery([$q,$u,$o,$t,$e,$s|Datasrc], StartTime, EndTime) when EndTime =< 
?Jan1_2005 ->
+    [get, {datasrc,"bdm2d2" ++ Datasrc},
hunk ./lib/buhlam/src/sample.erl 224
-             [open,'HMELIM','quote.open.time'],
+             [open,time,'quote.open.time'], %% Not HMELIM
hunk ./lib/buhlam/src/sample.erl 226
-             [close,'ZORDMEDE', 'bid.number.close'],
+             [close,'ZORDMEDE', 'quote.close.bid.number'],
hunk ./lib/buhlam/src/sample.erl 229
-             [close,'ZORDMEOF', 'ask.number.close'],
+             [close,'ZORDMEOF', 'quote.close.ask.number'],
hunk ./lib/buhlam/src/sample.erl 232
-             [close,'HMELIM','quote.close.time'],
+             [close,time,'quote.close.time'], %% Not HMELIM
hunk ./lib/buhlam/src/sample.erl 235
-             [wavr,'PMEDEM','QTITMEDE','quote.vwap.bid'],
-             [dwap,'PMEOF','quote.dwap.ask'],
-             [wavr,'PMEOF','QTITMEOF','quote.vwap.ask']
+             [dwap,'PMEOF','quote.dwap.ask']
hunk ./lib/buhlam/src/sample.erl 238
-% bbo
-dbquery(Datasrc = [$b,$b,$o|_], StartTime, EndTime) ->
-    [get, {datasrc,Datasrc},
+% quotes (bbo files, after Jan 1, 2005)
+dbquery([$q,$u,$o,$t,$e,$s|Datasrc], StartTime, EndTime) when StartTime >= 
?Jan1_2005 ->
+    [get, {datasrc,"bbo" ++ Datasrc},
hunk ./lib/buhlam/src/sample.erl 248
-             [close,'orders.on.best.bid', 'bid.number.close'],
+             [close,'orders.on.best.bid', 'quote.close.bid.number'],
hunk ./lib/buhlam/src/sample.erl 251
-             [close,'orders.on.best.ask','ask.number.close'],
+             [close,'orders.on.best.ask','quote.close.ask.number'],
hunk ./lib/buhlam/src/sample.erl 257
-             [wavr,'best.bid.price','size.on.best.bid','quote.vwap.bid'],
-             [dwap,'best.ask.price','quote.dwap.ask'],
-             [wavr,'best.ask.price','size.on.best.ask','quote.vwap.ask']
+             [dwap,'best.ask.price','quote.dwap.ask']
hunk ./lib/buhlam/src/sample.erl 261
-% bdm5d2
-dbquery(Datasrc = [$b,$d,$m,$5,$d,$2|_], StartTime, EndTime) ->
-    [get, {datasrc,Datasrc},
+% index (bdm5d2 files, before Jan 1, 2005)
+dbquery([$i,$n,$d,$e,$x|Datasrc], StartTime, EndTime) when EndTime =< 
?Jan1_2005 ->
+    [get, {datasrc,"bdm5d2" ++ Datasrc},
hunk ./lib/buhlam/src/sample.erl 268
-             {'CNIVIDX',close},
-             {'HEMAR',close},
+             [close,'XDRJIDX',level.close],
+             [close,time,level.time], %% Not HEMAR
hunk ./lib/buhlam/src/sample.erl 273
-% bdnhd2
-dbquery(Datasrc = [$b,$d,$n,$h,$d,$2|_], StartTime, EndTime) ->
-    [get, {datasrc,Datasrc},
+
+% MICHELE WILL INVESTIGATE INDEX FILE JANUARY 2005 AND FORWARD
+
+
+% offmarket (bdnhd2 files, before Jan 1, 2005)
+dbquery([$o,$f,$f,$m,$a,$r,$k,$e,$t|Datasrc], StartTime, EndTime) when EndTime 
=< ?Jan1_2005 ->
+    [get, {datasrc,"bdnhd2" ++ Datasrc},
hunk ./lib/buhlam/src/sample.erl 284
-           {close,'PNGHSC'}, {sum,'QTITNGHS'}, {high,'PNGHSC'}, 
{low,'PNGHSC'}, {open,'PNGHSC'}, {count,'PNGHSC'},
-           {grid, {hours,1}}}
+           [close,'PNGHSC',offmarket.close],
+           [sum,'QTITNGHS',offmarket.volume],
+           [high,'PNGHSC',offmarket.high],
+           [low,'PNGHSC',offmarket.low],
+           [[wavr,'PNGHSC','QTITNGHS'],offmarket.vwap],
+           [open,'PNGHSC',offmarket.open],
+           [close,time,'offmarket.close.time'],
+           [open,time,'offmarket.open.time'],
+           [count,'PNGHSC',offmarket.count],
+           [grid, {hours,1}]}
+    ];
+
+% offmarket (tcs files, after Jan 1, 2005)
+dbquery([$o,$f,$f,$m,$a,$r,$k,$e,$t|Datasrc], StartTime, EndTime) when 
StartTime >= ?Jan1_2005 ->
+    [get, {datasrc,"tcs" ++ Datasrc},
+        {interval,StartTime, EndTime},
+        {symbols,all},
+        {where, is_businessday, time},
+        {select,
+           [close,trade.price,offmarket.close],
+           [sum,trade.size,offmarket.volume],
+           [high,trade.price,offmarket.high],
+           [low,trade.price,offmarket.low],
+           [[wavr,trade.price,trade.size],offmarket.vwap],
+           [open,trade.price,offmarket.open],
+           [close,time,'offmarket.close.time'],
+           [open,time,'offmarket.open.time'],
+           [count,trade.price,offmarket.count],
+           {grid, {hours,1}}}
hunk ./lib/manager/src/logger.erl 35
--include("test_server.hrl").
-%-define(line,io:fwrite("Line ~p~n", [?LINE]),).
+%-include("test_server.hrl").
+-define(line,io:fwrite("Line ~p~n", [?LINE]),).
hunk ./lib/manager/src/logger.erl 160
-                     lists:reverse([{type,Errtype} | [{keyword, Keyword} | 
ConvNV]])};
+                     lists:reverse([{Errtype, Keyword} | ConvNV])};
hunk ./lib/manager/src/logger.erl 168
-           Errmsg = {Timestamp,ReportType,[{type,Type},{report,Report}]};
+           Errmsg = {Timestamp,ReportType,[{Type, Report}]};
hunk ./lib/manager/src/logger.erl 182
-                     [{term, Term},{epid,Epid}]};
+                     [{epid,Epid},{term, Term}]};
hunk ./lib/manager/src/logger.erl 306
-    ?line {{'#S',_}, sourcee, [{n2,v2},{n1,v1},{keyword,keywe},{type,error}]} 
= NextLine(),
-    ?line {{'#S',_}, sourcew, 
[{n2,v2},{n1,v1},{keyword,keyww},{type,warning}]} = NextLine(),
-    ?line {{'#S',_}, sourcei, [{n2,v2},{n1,v1},{keyword,keywi},{type,info}]} = 
NextLine(),
-    ?line {{'#S',_}, error_report, [{type,_Error},{report,_EReport}]} = 
NextLine(),
-    ?line {{'#S',_}, warning_report, [{type,_Warning},{report,_WReport}]} = 
NextLine(),
-    ?line {{'#S',_}, info_report, [{type,_Info},{report,_IReport}]} = 
NextLine(),
+    ?line {{'#S',_}, sourcee, [{n2,v2},{n1,v1},{error,keywe}]} = NextLine(),
+    ?line {{'#S',_}, sourcew, [{n2,v2},{n1,v1},{warning,keyww}]} = NextLine(),
+    ?line {{'#S',_}, sourcei, [{n2,v2},{n1,v1},{info,keywi}]} = NextLine(),
+    ?line {{'#S',_}, error_report,   [{_EType,_EReport}]} = NextLine(),
+    ?line {{'#S',_}, warning_report, [{_WType,_WReport}]} = NextLine(),
+    ?line {{'#S',_}, info_report,    [{_IType,_IReport}]} = NextLine(),
hunk ./lib/reuter/test/reuter_SUITE.erl 4
+-export([reuter_test/0, reuter_test/1]).
hunk ./lib/reuter/test/reuter_SUITE.erl 8
+-include("process.hrl").
hunk ./lib/reuter/test/reuter_SUITE.erl 54
+
+
+reuter_test() ->
+    reuter_test(testutil:datadir_privdir(databus)).
+reuter_test(suite) ->
+    [];
+reuter_test(doc) ->
+    "Stress test of the handlers in the reuters signal stream";
+reuter_test(_Config) ->
+    %% Requires the nodes reuters and buhlam to be running
+
+    ?line {ok,_} = dbclient:request([get, [datasrc,realtime], 
[interval,epoch,now]]),
+    forward().
+
+forward() ->
+    receive
+       ?handshake_guard ->
+           ?handshake_action,
+           forward();
+       ?response_eof ->
+           ok;
+       #response{parsed={{'#S',Timestamp}, Symbol, Fields}} ->
+           gen_event:notify(reuter_realtime, {update, Symbol, "text", 
conversion:to_now(Timestamp), Fields}),
+           forward();
+       R = #response{} ->
+           io:fwrite("Unrecognised response ~p~n",[R])
+    after
+       2000 ->
+           io:fwrite("Realtime forwarder did not receive messages for 2 
secs~n"),
+           forward()
+    end.
hunk ./lib/ttesnmp/src/ttesnmp_error_logger.erl 78
-    ?line {{'#S',_}, ttesnmp_error_logger, 
[{_N1,_V1},{keyword,'config.error'},{type,snmp}]} = NextLine(),
-    ?line {{'#S',_}, ttesnmp_error_logger, 
[{_N2,_V2},{keyword,'user.error'},{type,snmp}]} = NextLine(),
+    ?line {{'#S',_}, ttesnmp_error_logger, [{_N1,_V1},{snmp,'config.error'}]} 
= NextLine(),
+    ?line {{'#S',_}, ttesnmp_error_logger, [{_N2,_V2},{snmp,'user.error'}]} = 
NextLine(),
hunk ./lib/util/src/mibserver.erl 42
-    gen_server:call({global,Servername}, {set, Name, Value}).
+    gen_server:cast({global,Servername}, {set, Name, Value}).
hunk ./lib/util/src/mibserver.erl 65
-%@doc Sets a variable
-handle_call({set, Name, Value}, _, State) ->
-    {reply, ok, [ {Name,Value} | lists:keydelete(Name, 1, State) ]};
-
hunk ./lib/util/src/mibserver.erl 75
+
+%@doc Sets a variable
+handle_cast({set, Name, Value}, State) ->
+    {noreply, [ {Name,Value} | lists:keydelete(Name, 1, State) ]};
}
{
{
[catch ubf encoder errors in our logger (logger more crash safe).
stoffer@xxxxx**20050915092420] {
hunk ./lib/manager/src/logger.erl 196
-            snmpTrap(Errtype, Errmsg, State#state.node),
-           case file:write(NewState#state.iodev, 
[ubf:encode_deep(Errmsg),$\n]) of
+            catch snmpTrap(Errtype, Errmsg, State#state.node),
+            UbfErrmsg = case catch ubf:encode_deep(Errmsg) of
+                {'EXIT',_Reason} ->
+                    NewErrmsg = 
{Timestamp,failed.to.ubf.encode,[{reason,{'#S',to_str(_Reason,"~w")}},{value,{'#S',to_str(Errmsg,"~w")}}]},
+                    catch snmpTrap(warning, NewErrmsg, State#state.node),
+                    ubf:encode_deep(NewErrmsg);
+                Ubf -> Ubf
+            end,
+           case file:write(NewState#state.iodev, [UbfErrmsg,$\n]) of
hunk ./lib/manager/src/logger.erl 218
-    lists:flatten(io_lib:format("~p", [X])).
+    to_str(X,"~p").
+to_str(X,Format) ->
+    lists:flatten(io_lib:format(Format, [X])).
}
[changed a few internal debugs into logger:info regarding subscribe/unsubscribe
stoffer@xxxxx**20050916075857] {
hunk ./lib/reuter/src/e_src/reuter.erl 110
+            logger:info(?MODULE,call.received,[{caller,_Caller},{msg,Msg}]),
hunk ./lib/reuter/src/e_src/reuter.erl 114
+            logger:info(?MODULE,stop),
hunk ./lib/reuter/src/e_src/reuter_subscribe.erl 430
-    debug("~p: subscribing reuters for instrument ~p~n",
-                                 [?MODULE, Instrument]),
+    logger:info(?MODULE, subscribe, [{instrument,Instrument}]),
hunk ./lib/reuter/src/e_src/reuter_subscribe.erl 434
-    debug("~p: unsubscribing reuters for instrument ~p~n",
-                                   [?MODULE, Instrument]),
+    logger:info(?MODULE, unsubscribe, [{instrument,Instrument}]),
}
[Wiki Databus plugin supports adding extra columns with "onclick" capabilities 
(first draft).
stoffer@xxxxx**20050916160010] {
hunk ./lib/webconsole/src/ajax.erl 1
+%%@doc AJAX Callback Module.
+%%
+%% <p>This module defines ajax callback functions.</p>
+%% <p>All functions exported from this module can be
+%% called from a web/wiki page.</p>
+%% <p>All exported functions in this modules
+%% is called by {@link ajaxreq:handle_client_request/1}
+%% and function arguments are all strings</p>
+%% <p>All exported functions should return one of<ul>
+%% <li>@{ok, @{stop, ReturnValue@}@}</li>
+%% <li>@{ok, @{continue, ReturnValue, NameOfNewFunction, 
ListOfArguments@}@}<dt>Bla bla</dt></li>
+%% <li>... more to come ...</li>
+%% </ul>The return value, ReturnValue, is {@link json:encode/1. JSON encoded}
+%% by the calling function {@link ajaxreq:handle_client_request/1} and then
+%% returned to the webpage.</p>
+%%@end
+
hunk ./lib/webconsole/src/ajax.erl 21
+-export([wiki_hello/1]).
+-export([wiki_basket/2]).
+
hunk ./lib/webconsole/src/ajax.erl 27
--export([basketlist/0, basketlist/1, basket_go/1, basket_recalc/1]).
+-export([basketlist/0, basketlist/1]).
hunk ./lib/webconsole/src/ajax.erl 32
--export([sasl_log/0]).
-
hunk ./lib/webconsole/src/ajax.erl 44
-%%
+%% Special Wiki Databus plugin callback functions, all prefixed with wiki_
+%% 
------------------------------------------------------------------------------------
+
+wiki_hello(StrNamedValuePair) ->
+    {ok, {stop, ?S("Hello!\n\n" ++ StrNamedValuePair)}}.
+
+wiki_basket(StrNamedValuePair,StrBasketAction) ->
+    {ok,Args} = scanNparse(StrNamedValuePair),
+    StrBasketId = get_nv('basket.id',Args),
+    ajax_databus:basket(StrBasketAction,StrBasketId),
+    {ok, {stop, ?S("Basket id: " ++ StrBasketId ++ ", Action: " ++ 
StrBasketAction ++ " - OK.")}}.
+
+get_nv(Name, [{Name,Value}|_T]) -> Value;
+get_nv(Name, [_H|T]) -> get_nv(Name,T);
+get_nv(_Name, []) -> [].
+
+%% 
------------------------------------------------------------------------------------
+%% Small simple test functions
hunk ./lib/webconsole/src/ajax.erl 76
+
+%% 
------------------------------------------------------------------------------------
+%%
+%% 
------------------------------------------------------------------------------------
hunk ./lib/webconsole/src/ajax.erl 148
-
-basket_go (StrBasketId) ->
-    ajax_databus:basket_go(StrBasketId),
-    {ok, {stop, []}}.
-
-basket_recalc (StrBasketId) ->
-    ajax_databus:basket_recalc(StrBasketId),
-    {ok, {stop, []}}.
-
-sasl_log () ->
-    L = os:cmd("bin/log"),
-    {ok, {stop, ?S(L)}}.
hunk ./lib/webconsole/src/ajax.erl 204
-scanNparse(StrRequest) ->
-    case erl_scan:string(StrRequest) of
+scanNparse(Str) ->
+    EndStr = case string:right(Str,1) of "." -> Str; _ -> Str++"." end,
+    case erl_scan:string(EndStr) of
hunk ./lib/webconsole/src/ajax.erl 236
+%%@private
hunk ./lib/webconsole/src/ajax.erl 239
+%%@private
hunk ./lib/webconsole/src/ajax.erl 242
+%%@private
hunk ./lib/webconsole/src/ajax.erl 245
+%%@private
hunk ./lib/webconsole/src/ajax_databus.erl 5
--export([basketlist/0, basket_go/1, basket_recalc/1]).
+-export([basketlist/0, basket/2]).
hunk ./lib/webconsole/src/ajax_databus.erl 218
-basket_go(StrBasketId) ->
+basket(Action,StrBasketId) when is_list(Action) ->
+    basket(list_to_atom(Action),StrBasketId);
+basket(Action,StrBasketId) when is_atom(Action) ->
+    BA = list_to_atom(atom_to_list(Action) ++ ".basket"),
hunk ./lib/webconsole/src/ajax_databus.erl 223
-    dbclient:send(Ref, { 'accept.basket', { '#S' , StrBasketId } }),
-    dbclient:send(Ref, 'eof'),
-    dbclient:close(Ref),
-    [].
-
-basket_recalc(StrBasketId) ->
-    {ok, Ref} = dbMakeRequest({put, [{datasrc, commands}]}),
-    dbclient:send(Ref, { 'recalc.basket', { '#S' , StrBasketId } }),
+    dbclient:send(Ref, {BA, [{basket.id, {'#S',StrBasketId}}] }),
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 26
+scanNparse(Str) ->
+    EndStr = case string:right(Str,1) of "." -> Str; _ -> Str++"." end,
+    case catch erl_scan:string(EndStr) of
+        {ok, Tokens, _} ->
+           case catch erl_parse:parse_term(Tokens) of
+               {ok, Terms} -> Terms;
+               _ -> []
+           end;
+        _ -> []
+    end.
+
+to_str(X) when is_atom(X) -> atom_to_list(X);
+to_str(X) when is_list(X) -> X;
+to_str(X) -> lists:flatten(io_lib:format("~p",[X])).
+
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 58
+    Addcols = lists:usort(list_arg("addcol",ArgList)),
+
+    logger:info(?MODULE,addcols,[{list,Addcols}]),
+
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 75
+    AddcolList = json:encode(
+                       lists:map(
+                           fun(E) when E /= [] ->
+                               L = scanNparse(E),
+                               json:object(erlang:list_to_tuple(
+                                   lists:foldl(
+                                       fun({link,Link,Fun},Acc) -> 
+                                              [
+                                                json:object(
+                                                        json:string(js),
+                                                        json:string("'<div " ++
+                                                             
"onclick=\"wdb_f_"++UID++"_action(this,\\'wiki_"++to_str(Fun)++"\\')\">" ++
+                                                             
to_str(Link)++"</div>';")),
+                                                json:object(json:string(link), 
json:string(Link))
+                                              | Acc];
+                                          ({link,Link,Fun,Arg},Acc) -> 
+                                              [
+                                                json:object(
+                                                        json:string(js),
+                                                        json:string("'<div " ++
+                                                             
"onclick=\"wdb_f_"++UID++"_action(this,\\'wiki_"++to_str(Fun)++"\\',\\'"++to_str(Arg)++"\\')\">"
 ++
+                                                             
to_str(Link)++"</div>';")),
+                                                json:object(json:string(link), 
json:string(Link))
+                                              | Acc];
+                                          ({N,V},Acc) -> 
+                                              [json:object(json:string(N), 
json:string(V)) | Acc];
+                                          (_,Acc) -> Acc
+                                       end, [], L)));
+                              ([]) -> ""
+                           end, Addcols)),
+
+    if AddcolList /= [] -> 
logger:info(?MODULE,addcollist,[{json,AddcolList}]); true -> ok end,
+
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 126
+    
logger:info(?MODULE,sum.list,[{sumcols,Sumcols},{sumfuncs,Funclist},{json,Sumlist}]),
+
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 161
+    "function wdb_f_" ++ UID ++ "_action (n,f,a) {\n" ++
+    "  var R = ajax_row_to_nvplist(ajax_getParent(n,\"tr\"),\"wdb_thead_" ++ 
UID ++ "\");\n" ++
+    "  if (a) erlang_function(f,store_in_popup(),R,a); else 
erlang_function(f,store_in_popup(),R);\n" ++
+    "}\n" ++
hunk ./lib/webconsole/src/wiki_plugin_databus.erl 172
-    "    wdb_ref_" ++ UID ++ " = 
erlang_function('dbget',store_in_table('wdb_tbody_" ++ UID ++ "','wdb_thead_" 
++ UID ++ "','wdb_tfoot_" ++ UID ++ "','" ++ Sort ++ "',auto,'t" ++ UID ++ 
"',[" ++ Keylist ++ "],[]," ++ Sumlist ++ "),'" ++ Bufsiz ++ "',Q);\n"
+    "    wdb_ref_" ++ UID ++ " = 
erlang_function('dbget',store_in_table('wdb_tbody_" ++ UID ++ "','wdb_thead_" 
++ UID ++ "','wdb_tfoot_" ++ UID ++ "','" ++ Sort ++ "',auto,'t" ++ UID ++ 
"',[" ++ Keylist ++ "]," ++ AddcolList ++ "," ++ Sumlist ++ "),'" ++ Bufsiz ++ 
"',Q);\n"
hunk ./www/sajax.js 454
-function ajax_resetcolor(row_id, cellIndex, resetColor) {
+function ajax_resetcolor(row_id, colId, resetColor) {
hunk ./www/sajax.js 456
-               
document.getElementById(row_id).cells[cellIndex].removeAttribute("colorCode");
+               var col = ajax_table_columns[colId];
+               
document.getElementById(row_id).cells[col.cellIndex].removeAttribute("colorCode");
hunk ./www/sajax.js 493
-       if (isNaN(numValue) || col.cn) {
+       if (col.cn) {
hunk ./www/sajax.js 495
-       } else {
+       } else if (isNaN(numValue) && numValue) {
+               td.setAttribute("valueType",numValue);
+       } else if (!isNaN(numValue)) {
hunk ./www/sajax.js 499
-       }
+       } else {
+               td.setAttribute("valueType",null);
+        }
hunk ./www/sajax.js 826
-       var pattern = 
/^timestamp$|^instrument$|^date$|^time$|.+\.date$|.+\.code$/i
+       var pattern = 
/^timestamp$|^instrument$|^date$|^time$|.+\.date$|.+\.code$|.+\.id$/i
hunk ./www/sajax.js 829
-function ajax_init_new_column(auto, tbody, thead, colId, name, value, 
sumObjList) {
+function ajax_init_new_column(auto, tbody, thead, tfoot, position, colId, 
name, value, sumObjList) {
hunk ./www/sajax.js 831
+       var pos = parseInt(position);
hunk ./www/sajax.js 867
-               c = thead.rows[0].insertCell(thead.rows[0].cells.length);
+                var len = thead.rows[0].cells.length;
+               if (isNaN(pos)) pos = len;
+               if (pos > len) pos = len;
+               if (pos < 0) pos = 0;
+               if (pos < len) {
+                       // reposition columns
+                       for (var colid in ajax_table_columns) {
+                               var col = ajax_table_columns[colid];
+                               if (col.cellIndex>=pos) col.cellIndex += 1;
+                       }
+                       // reposition sum footer columns
+                       if (tfoot) {
+                               var fpos = pos>0?pos:1;
+                               for (fr=1; fr<tfoot.rows.length; fr++)
+                                       tfoot.rows[fr].insertCell(fpos);
+                       }
+               }
+               // reposition table body
+               if (tbody) {
+                       for (br=0; br<tbody.rows.length; br++)
+                               tbody.rows[br].insertCell(pos);
+               }
+               c = thead.rows[0].insertCell(pos);
hunk ./www/sajax.js 892
-               ajax_adjustRowCells(tbody, thead.rows[0].cells.length);
+
hunk ./www/sajax.js 1006
-                               col = ajax_init_new_column(auto, tbody, thead, 
colId, name, value, sumObjList);
+                               col = ajax_init_new_column(auto, tbody, thead, 
tfoot, null, colId, name, value, sumObjList);
hunk ./www/sajax.js 1067
-                                               tid = 
setTimeout("ajax_resetcolor('" + tr.id + "'," + col.cellIndex + ",'black')", 
ajax_color_msec);
+                                               tid = 
setTimeout("ajax_resetcolor('" + tr.id + "','" + colId + "','black')", 
ajax_color_msec);
hunk ./www/sajax.js 1099
+                       var ln = colData[j]["link"];
hunk ./www/sajax.js 1101
+                       var pos = parseInt(colData[j]["pos"]);
+                       if (!id && ln) id = ln;
hunk ./www/sajax.js 1104
+                                var name = id;
hunk ./www/sajax.js 1107
-
hunk ./www/sajax.js 1112
+
hunk ./www/sajax.js 1114
-                                       col = ajax_init_new_column(auto, tbody, 
thead, colId, name, value, sumObjList);
+                                       //if (isNaN(pos)) pos = 0;
+                                       col = ajax_init_new_column(auto, tbody, 
thead, tfoot, pos, colId, name, value, sumObjList);
hunk ./www/sajax.js 1118
-                               ajax_setColumnValue(tr, col, id, value, 
numValue, true);
+                               ajax_setColumnValue(tr, col, id, value, 
'clickme', true);
hunk ./www/sajax.js 1185
+function store_in_popup() {
+       return function(result,status) { if (result) alert(result); };
+}
+
+/************************************************************\
+*
+\************************************************************/
hunk ./www/sajax.js 1224
+}
+
+/************************************************************\
+*
+\************************************************************/
+function ajax_row_to_nvplist(tr,id_thead) {
+       if (!tr) { return "[]"};
+       if (!tr.cells) { return "[]"};
+
+       thead = document.getElementById(id_thead);
+
+       var vp="[";
+       for (i=0; i<tr.cells.length; i++) {
+               if (vp != "[") vp += ",";
+               vp += "{'" + ajax_table_columns[thead.rows[0].cells[i].id].name 
+ "',\"" + tr.cells[i].innerHTML.toString().replace(/\"/g,"\\\"") + "\"}";
+       }
+       vp += "]";
+       //alert(vp);
+       return vp;
hunk ./www/tte.css 66
+td[valueType="clickme"] {
+       font-family: Verdana, Arial, Helvetica, sans-serif;
+       font-size: 16px;
+       color: #333333;
+       font-weight: bolder;
+        text-align: center;
+}
}
}
{
}
}
}


<Prev in Thread] Current Thread [Next in Thread>