/* This DOT file represents the logical interaction between
 * the events in the system and the "state" of tlsdated.
 */
digraph tlsdated {
  graph[compound=true];

  node[style=filled,color=lightblue];

  subgraph cluster_states {
    state_label[shape=box,style=dashed,label="States"];
    sleep -> wake;
    wake -> sync;
    sync -> save;
    save -> sleep;
    wake -> terminate;
    sync -> terminate;
    save -> terminate;
  }

  subgraph cluster_wake {
    color=purple;
    style=filled;
    wake_label[shape=box,style=dashed,label="Wake Events"];
    periodic_local_clock_check -> wake;
    periodic_network_sync -> wake;
    random_sigterm -> wake;
    random_route_change -> wake;
  }

  subgraph cluster_dbus {
    dbus_label[shape=box,style=dashed,label="DBus Events"];
    dbus-> cros_shill_manager_change -> wake;
    dbus-> cros_shill_service_change -> wake;
    dbus -> cros_proxy_resolved -> {proxy_ok, proxy_failed};
    dbus -> cros_user_set_time -> save;
            cros_user_set_time -> sync [style=dotted];
    get_proxy -> cros_resolve_proxy -> dbus;
    announce -> dbus;
  }

  subgraph cluster_sync {
    sync_label[shape=box,style=dashed,label="Network Sync"];
    sync -> get_proxy -> {proxy_ok, proxy_failed, proxy_timed_out} -> tlsdate;
    tlsdate -> tlsdate_ok -> save;
    tlsdate -> tlsdate_fail;
    tlsdate_fail -> tlsdate [label="retry",style=dotted];
    tlsdate_fail -> terminate;
  };

  subgraph cluster_save {
    save_label[shape=box,style=dashed,label="Save to the system"];
    save -> { synchronize_rtc, synchronize_kernel, synchronize_disk } -> { save_ok, save_fail, save_bad_time };
    save_ok -> announce -> sleep;
    save_fail -> terminate;
    save_bad_time -> sleep;
  }
}

