/// <inheritdoc/> public async Task WriteAsync(IDictionary <string, dynamic> values) { await _lock.WaitAsync(); try { // Force synchronization and merge in new values Sync(); foreach (var value in values) { if (value.Value == null) { _master.Remove(value.Key); } else if (_master.ContainsKey(value.Key)) { _master[value.Key] = value.Value; } else { _master.Add(value.Key, value.Value); } } // Write all to file var path = Path.Combine(Path.GetTempPath(), _fileName); File.WriteAllText(path, JsonConvertEx.SerializeObjectPretty(_master)); // Make sure we do not unnecesarily sync _updated = true; } catch (Exception ex) { throw new StorageException("Exception writing", ex); } finally { _lock.Release(); } }
/// <inheritdoc/> public Task SendEventAsync(byte[] data, string contentType, string eventSchema, string contentEncoding) { var json = Encoding.UTF8.GetString(data); var o = JsonConvert.DeserializeObject(json); Console.WriteLine(contentType); Console.WriteLine(JsonConvertEx.SerializeObjectPretty(o)); return(Task.CompletedTask); }
/// <summary> /// Write jobs to file system /// </summary> /// <returns></returns> private Task UpdateFilesystem() { foreach (var file in Directory.GetFiles(_jobsDirectory)) { File.Delete(file); } foreach (var job in _jobs) { var jobFilename = _jobsDirectory.Trim().TrimEnd('/') + "/" + $"{job.Id}.json"; var json = JsonConvertEx.SerializeObjectPretty(job); File.WriteAllText(jobFilename, json); } return(Task.CompletedTask); }
/// <summary> /// Dump all documents using sql /// </summary> public static async Task DumpCollectionAsync(CliOptions options) { var collection = await GetDocsAsync(options); var queryable = collection.OpenSqlClient(); var feed = queryable.Query <dynamic>("select * from root"); while (feed.HasMore()) { var result = await feed.ReadAsync(); foreach (var item in result) { Console.WriteLine(JsonConvertEx.SerializeObjectPretty(item)); } } }
/// <summary> /// Publish test messages /// </summary> /// <param name="ct"></param> /// <returns></returns> private async Task PublishAsync(CancellationToken ct) { _logger.Information("Starting to publish..."); for (var index = 0; !ct.IsCancellationRequested; index++) { var message = JsonConvertEx.SerializeObjectPretty(new { GeneratedAt = DateTime.UtcNow, Index = index }); _logger.Information("Publishing test message {Index}", index); await _events.SendAsync(Encoding.UTF8.GetBytes(message), ContentEncodings.MimeTypeJson); if (Interval != TimeSpan.Zero) { await Task.Delay(Interval, ct); } } _logger.Information("Publishing complete."); }
/// <summary> /// Ping continously /// </summary> private static async Task PingAsync(IIoTHubConfig config, ILogger logger, string deviceId, string moduleId, CancellationToken ct) { var client = new IoTHubTwinMethodClient(CreateClient(config, logger), logger); logger.Information("Starting echo thread"); var found = false; for (var index = 0; !ct.IsCancellationRequested; index++) { try { var message = JsonConvertEx.SerializeObjectPretty(new { Index = index, Started = DateTime.UtcNow }); logger.Debug("Sending ECHO {Index}... ", index); var result = await client.CallMethodAsync(deviceId, moduleId, "Echo_V1", message, null, ct); found = true; try { var returned = (dynamic)JToken.Parse(result); logger.Debug("... received back ECHO {Index} - took {Passed}.", returned.Index, DateTime.UtcNow - ((DateTime)returned.Started)); } catch (Exception e) { logger.Error(e, "Bad result for ECHO {Index}: {result} ", index, result); } } catch (Exception ex) { if (!found && (ex is ResourceNotFoundException)) { logger.Debug("Waiting for module to connect..."); continue; // Initial startup ... } logger.Information(ex, "Failed to send ECHO {Index}.", index); } } logger.Information("Echo thread completed"); }
/// <inheritdoc/> public override string ToString() => JsonConvertEx.SerializeObjectPretty(_configuration);