/// <summary> /// Called by derived classes when a complete JSON string has been received. /// </summary> /// <param name="json">The JSON string.</param> protected void onData(string json) { JSONdn data = new JSONdn(json); if (data.has("status")) { if (data.has("tick")) { // Ignore ticks } else switch (data.getStringVal("status")) { case "failure": case "error": onError(data.getStringVal("message")); break; case "warning": onWarning(data.getStringVal("message")); break; default: onWarning("Unhandled status message: \"" + data.getStringVal("status") + "\""); break; } } else if (data.has("hash")) { // The data contains a hash so the connection is consuming // multiple streams. if (data.has("data.deleted")) { m_event_handler.onDeleted(this, new Interaction(data.getJVal("data")), data.getStringVal("hash")); } else { m_event_handler.onInteraction(this, new Interaction(data.getJVal("data")), data.getStringVal("hash")); } } else if (data.has("interaction")) { // The data does not contain a hash so the connection is // consuming a single stream. Use the first element in // the hashes array as the hash for the callback. if (data.has("deleted")) { m_event_handler.onDeleted(this, new Interaction(data.getJVal()), m_hashes[0]); } else { m_event_handler.onInteraction(this, new Interaction(data.getJVal()), m_hashes[0]); } } else { // Hitting this means the data structure did not have any of // the expected elements. onError("Unhandled data received: " + json); } }
/// <summary> /// Prepare this Historics query. /// </summary> public void prepare() { if (isDeleted()) { throw new InvalidDataException("Cannot set the name of a deleted Historics query"); } if (m_playback_id.Length > 0) { throw new InvalidDataException("This Historics query has already been prepared"); } Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("hash", m_stream_hash); parameters.Add("start", Utils.DateTimeToUnixTimestamp(m_start_date).ToString()); parameters.Add("end", Utils.DateTimeToUnixTimestamp(m_end_date).ToString()); parameters.Add("name", m_name); parameters.Add("sources", string.Join(",", m_sources.ToArray())); try { JSONdn res = m_user.callApi("historics/prepare", parameters); if (!res.has("id")) { throw new InvalidDataException("Prepared successfully but no playback ID in the response"); } m_playback_id = res.getStringVal("id"); if (!res.has("dpus")) { throw new InvalidDataException("Prepared successfully but no DPU cost in the response"); } m_dpus = res.getDoubleVal("dpus"); if (!res.has("availability")) { throw new InvalidDataException("Prepared successfully but no availability in the response"); } m_availability = new HistoricDataAvailability(new JSONdn(res.getJVal("availability"))); } catch (ApiException e) { // 400 = Missing or bad parameters. // 404 = Historics query not found. if (e.Code == 400 || e.Code == 404) { throw new InvalidDataException(e.Message); } throw new ApiException("Unexpected API response code: " + e.Code.ToString() + " " + e.Message); } // Update our data. reloadData(); }
public HistoricDataAvailability(JSONdn json) { m_start = json.getDateTimeFromLongVal("start"); m_end = json.getDateTimeFromLongVal("end"); if (json.has("sources")) { foreach (string key in json.getKeys("sources")) { m_sources.Add(key, new HistoricDataAvailabilitySource(new JSONdn(json.getJVal("sources." + key)))); } } }
public HistoricDataAvailabilitySource(JSONdn json) { m_status = json.getIntVal("status"); foreach (JToken version in json.getJVal("versions")) { m_versions.Add(Convert.ToInt32(version.ToString())); } foreach (string key in json.getKeys("augmentations")) { m_augmentations.Add(key, json.getIntVal("augmentations." + key)); } }
/// <summary> /// Recursive method to parse a tree in JSON into the flat /// dot-notation parameters used by the API. /// </summary> /// <param name="json">The JSON object.</param> /// <param name="key_prefix">The current key prefix.</param> protected void setOutputParams(JSONdn json, string key_prefix) { foreach (string key in json.getKeys()) { string full_key = (key_prefix.Length == 0 ? "" : key_prefix + ".") + key; if (json.hasChildren(key)) { setOutputParams(new JSONdn(json.getJVal(key)), full_key); } else { set(full_key, json.getStringVal(key)); } } }
/// <summary> /// Constructor. /// </summary> /// <param name="data">The JSON API response.</param> public Dpu(JSONdn data) { m_dpu = new Dictionary <string, DpuItem>(); foreach (string key in data.getKeys("detail")) { DpuItem item = new DpuItem(data.getIntVal("detail." + key + ".count"), data.getDoubleVal("detail." + key + ".dpu")); if (data.has("detail." + key + ".targets")) { JToken t = data.getJVal("detail." + key + ".targets"); foreach (string targetkey in data.getKeys("detail." + key + ".targets")) { JSONdn t2 = new JSONdn(t[targetkey]); item.addTarget(targetkey, new DpuItem(t2.getIntVal("count"), t2.getDoubleVal("dpu"))); } } m_dpu.Add(key, item); } m_total = data.getDoubleVal("dpu"); }
/// <summary> /// Constructor. /// </summary> /// <param name="data">The JSON API response.</param> public Dpu(JSONdn data) { m_dpu = new Dictionary<string, DpuItem>(); foreach (string key in data.getKeys("detail")) { DpuItem item = new DpuItem(data.getIntVal("detail." + key + ".count"), data.getDoubleVal("detail." + key + ".dpu")); if (data.has("detail." + key + ".targets")) { JToken t = data.getJVal("detail." + key + ".targets"); foreach (string targetkey in data.getKeys("detail." + key + ".targets")) { JSONdn t2 = new JSONdn(t[targetkey]); item.addTarget(targetkey, new DpuItem(t2.getIntVal("count"), t2.getDoubleVal("dpu"))); } } m_dpu.Add(key, item); } m_total = data.getDoubleVal("dpu"); }
/// <summary> /// Initialise this object from teh data in a JSON object. /// </summary> /// <param name="data">The JSON object.</param> public void init(JSONdn data) { if (!data.has("id")) { throw new ApiException("No playback ID in the response"); } if (m_playback_id.Length > 0 && m_playback_id.CompareTo(data.getStringVal("id")) != 0) { throw new ApiException("Incorrect playback ID in the response"); } m_playback_id = data.getStringVal("id"); if (!data.has("definition_id")) { throw new ApiException("No definition hash in the response"); } m_stream_hash = data.getStringVal("definition_id"); if (!data.has("name")) { throw new ApiException("No name in the response"); } m_name = data.getStringVal("name"); if (!data.has("start")) { throw new ApiException("No start timestamp in the response"); } m_start_date = data.getDateTimeFromLongVal("start"); if (!data.has("end")) { throw new ApiException("No end timestamp in the response"); } m_end_date = data.getDateTimeFromLongVal("end"); if (!data.has("created_at")) { throw new ApiException("No created at timestamp in the response"); } m_created_at = data.getDateTimeFromLongVal("created_at"); if (!data.has("status")) { throw new ApiException("No status in the response"); } m_status = data.getStringVal("status"); if (!data.has("progress")) { throw new ApiException("No progress in the response"); } m_progress = data.getIntVal("progress"); if (!data.has("sources")) { throw new ApiException("No sources in the response"); } m_sources.Clear(); foreach (JToken source in data.getJVal("sources")) { m_sources.Add(source.ToString()); } if (!data.has("sample")) { throw new ApiException("No sample in the response"); } m_sample = data.getDoubleVal("sample"); }
/// <summary> /// Extract data from a JSON object. /// </summary> /// <param name="json">The JSON object.</param> protected void init(JSONdn json) { if (!json.has("id")) { throw new InvalidDataException("No ID found"); } m_id = json.getStringVal("id"); if (!json.has("name")) { throw new InvalidDataException("No name found"); } m_name = json.getStringVal("name"); if (!json.has("created_at")) { throw new InvalidDataException("No created at date found"); } m_created_at = Utils.UnixTimestampToDateTime(json.getLongVal("created_at")); if (!json.has("status")) { throw new InvalidDataException("No status found"); } m_status = json.getStringVal("status"); if (!json.has("hash_type")) { throw new InvalidDataException("No hash_type found"); } m_hash_type = json.getStringVal("hash_type"); if (!json.has("hash")) { throw new InvalidDataException("No hash found"); } m_hash = json.getStringVal("hash"); if (!json.has("last_request")) { throw new InvalidDataException("No last request date found"); } try { m_last_request = Utils.UnixTimestampToDateTime(json.getLongVal("last_request")); } catch (Exception) { m_last_request = DateTime.MinValue; } if (!json.has("last_success")) { throw new InvalidDataException("No last success date found"); } try { m_last_success = Utils.UnixTimestampToDateTime(json.getLongVal("last_success")); } catch (Exception) { m_last_success = DateTime.MinValue; } if (!json.has("output_type")) { throw new InvalidDataException("No output type found"); } m_output_type = json.getStringVal("output_type"); if (!json.has("id")) { throw new InvalidDataException("No ID found"); } m_output_params.Clear(); m_output_params.parse(new JSONdn(json.getJVal("output_params"))); }