anchor.diff:  request_timestamp({get, Ts, _}) -> Ts;
   request_timestamp({post, Ts, _, _}) -> Ts.
   
  -
  +% tasks_gatherer:merge_logs([{disk_log, "./submit_requests.0.log"}, {disk_log, "./users_update_requests.0.log"},{csv_log, "./search_requests.0.log"}], "./merged.log").
   -spec merge_logs(From :: [task()], To :: string()) -> ok | {error, Why :: string()}.
   merge_logs(Tasks, FileName) ->
       Files = [ F || {_, F} <- Tasks ],
  
positive.code: 
  disk_log_reader(File) -> 
      disk_log:open([{name, File}, {file, File}, {mode, read_only}]),
      {disk_log_reader_fun(File, start), []}.
  
  disk_log_reader_fun(Name, Continuation) ->
      fun() ->
  
negative.code:     Url = "http://api.aboutecho.com/" ++ E,
      {post, Ts, Url, Data}.
  
  % see https://github.com/lkiesow/erlang-datetime/blob/master/datetime.erl for the help
  -spec csv_log_item_process([string()]) -> request().
  csv_log_item_process([DateTimeStr,Endpoint]) ->
      {ok, [MonStr, Day, Year, Hour, Min, Sec, MS], []} = io_lib:fread("~3s ~d, ~d ~d:~d:~d.~d", DateTimeStr),
      Mon = month(MonStr),
      Secs  = calendar:datetime_to_gregorian_seconds( {{Year,Mon,Day},{Hour,Min,Sec}}) - 
                  calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}}),
      Ts = {Secs div 1000000, Secs rem 1000000, MS},
      Url = "http://api.aboutecho.com" ++ Endpoint,
      {get, Ts, Url}.
  
  month("Jan") -> 1;
  month("Feb") -> 2;
  month("Mar") -> 3;
  month("Apr") -> 4;
  month("May") -> 5;
  month("Jun") -> 6;
  month("Jul") -> 7;
  month("Aug") -> 8;
  month("Sep") -> 9;
  month("Oct") -> 10;
  month("Nov") -> 11;
  month("Dec") -> 12.
  
  strip(Str) ->
      lists:foldl(fun(Char, Acc) -> string:strip(Acc, both, Char) end, Str, [$\r, $\n]).
  
  merge([]) -> ok;
  merge([{_,[R|_]} | _ ] = Handlers) -> 
      MinIdx = min_idx(1, {1,request_timestamp(R)}, Handlers),
      %io:format("MinIdx:~p Handlers:~p~n", [MinIdx, Handlers]),
      {Request, NewHandlers} = get_and_read_next(MinIdx, Handlers),
      %io:format("Request: ~p~n", [element(2,Request)]),
      disk_log:log(?TARGET, Request),
      merge(NewHandlers).
  
  min_idx(_CurIdx, {MinIdx, _Min}, []) -> MinIdx;
  min_idx(CurIdx, {_MinIdx, Min} = M, [{_, [R|_]} | Rest]) ->
      case request_timestamp(R) of 
          Cur when Cur < Min -> min_idx(CurIdx+1, {CurIdx, Cur}, Rest);
          _ -> min_idx(CurIdx+1, M, Rest)
      end.
  
  get_and_read_next(Idx, Handlers) ->
  