diff options
Diffstat (limited to 'sources/fabrice/pacemaker/avt2trace.ml')
| -rw-r--r-- | sources/fabrice/pacemaker/avt2trace.ml | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/sources/fabrice/pacemaker/avt2trace.ml b/sources/fabrice/pacemaker/avt2trace.ml new file mode 100644 index 0000000..e032acb --- /dev/null +++ b/sources/fabrice/pacemaker/avt2trace.ml @@ -0,0 +1,85 @@ +open Sets + +open SimulTypes +open SimulTrace + +let input_line ic = + let s = String.lowercase (input_line ic) in + for i = 0 to String.length s - 1 do + match s.[i] with + '\t' -> s.[i] <- ' ' + | _ -> () + done; + s + + +let filename = Sys.argv.(1) + +let _ = + let events = ref [] in + + let min_time = ref max_float in + let max_time = ref min_float in + let npeers = ref 0 in + let ic = open_in filename in + begin + try + while true do + let line = input_line ic in + match String2.split_simplify line ' ' with + id :: nsessions :: sessions -> + let id = !npeers in + let rec iter sessions = + match sessions with + | [] -> () + | begin_time :: end_time :: sessions -> + let begin_time = float_of_string begin_time in + let end_time = float_of_string end_time in + min_time := min begin_time !min_time; + max_time := max end_time !max_time; + events := (begin_time, id, true) :: (end_time, id, false) :: !events; + iter sessions + | _ -> + Printf.printf "Unexpected line [%s]\n" + (String.escaped line); + assert false + in + iter sessions; + incr npeers; + | _ -> assert false + done; + with + End_of_file -> close_in ic; + end; + + Printf.printf "Sorting...\n%!"; + let events = List.sort compare !events in + let ndays = 1 + int_of_float ((!max_time -. !min_time) /. 86400.) in + let oc = open_out (filename ^ ".dat") in + trace_output oc (Peers !npeers); + trace_output oc (Days (ndays, 60 * 24)); + for i = 0 to !npeers - 1 do + trace_output oc (Peer (i,0., "avt")); + done; + let rec iter round next_round events = + match events with + [] -> () + | (time, p, status) :: tail -> + + if time < next_round then begin + trace_output oc (if status then + On p + else + Off p); + iter round next_round tail + + end else begin + trace_output oc (Round (round+1)); + iter (round+1) (next_round +. 60.) events + end + + in + trace_output oc (Round 0); + iter 0 (!min_time +. 60.) events; + trace_output oc End; + close_out oc
\ No newline at end of file |
