static async Task DoJobAsync() { if (Application.MQTTCLIENT.IsConnected == false) { ConsoleLogger.Log($"[mqtt] mqtt server is unreachable"); return; } var servicesNames = new List <string>(); var antdUnits = Directory.EnumerateFiles("/mnt/cdrom/Units/antd.target.wants").ToArray(); for (var i = 0; i < antdUnits.Length; i++) { servicesNames.Add(Path.GetFileName(antdUnits[i])); } var applicativeUnits = Directory.EnumerateFiles("/mnt/cdrom/Units/applicative.target.wants").ToArray(); for (var i = 0; i < applicativeUnits.Length; i++) { servicesNames.Add(Path.GetFileName(applicativeUnits[i])); } var arrServicesNames = servicesNames.ToArray(); var services = new ServiceStatus[arrServicesNames.Length]; for (var i = 0; i < arrServicesNames.Length; i++) { services[i] = new ServiceStatus { Name = arrServicesNames[i], IsActive = cmds.Systemctl.IsActive(arrServicesNames[i]) }; } var du = DiskUsage.Get(); var dus = new DiskUsageStatus[du.Length]; for (var i = 0; i < du.Length; i++) { dus[i] = new DiskUsageStatus { Device = du[i].MountedOn, Used = int.Parse(du[i].UsePercentage.Replace("%", "")) }; } var free = Free.Get(); var frees = new FreeStatus[free.Length]; for (var i = 0; i < free.Length; i++) { frees[i] = new FreeStatus() { Name = free[i].Name, Total = ParseInt(free[i].Total), Used = ParseInt(free[i].Used), Free = ParseInt(free[i].Free), Shared = ParseInt(free[i].Shared), BuffCache = ParseInt(free[i].BuffCache), Available = ParseInt(free[i].Available) }; } var status = new CurrentMachineStatus() { PublicIp = PublicIp.Get(), MachineId = Application.MACHINE_ID, Date = new DateStatus { Date1 = DateTime.Now, Date2 = Date.Get() }, Free = frees, DiskUsage = dus, Services = services }; var converted = MSG.Serialize(status); var message = new MqttApplicationMessageBuilder() .WithTopic("/status") .WithPayload(converted) .WithExactlyOnceQoS() .WithRetainFlag() .Build(); await Application.MQTTCLIENT.PublishAsync(message); //WriteStatus(status); }