Task CreateUpdateTask() { try { return(TaskUtils.RunForever(c => { Api .Call <Api.Responses.Processes>(new Api.Requests.Processes(), Canceller.Token) .ContinueWith(t => { if (t.IsCanceled) { return new TwoLineListItem[0]; } if (t.IsFaulted) { throw t.Exception; } return t.Result.processes .Select(p => new TwoLineListItem { Line1 = $"{p.imageName} ({p.pid})", Line2 = $"Memory: {UIConversion.FromBytes(p.memUsage)}, CPU: {TimeSpan.FromMilliseconds(p.cpuTime)}", Tag = p }) .OrderBy(i => i.Line1) .ToArray(); }) .ContinueWith(t => { RunOnUiThread(() => { if (t.IsFaulted) { Log.Error(TAG, $"Failed to fetch processes with error {t.Exception.Flatten().InnerException}."); Toast.MakeText(this, $"Failed to fetch processes.", ToastLength.Short).Show(); return; } Populate(t.Result); }); }); }, Canceller.Token, REFRESH_PERIOD)); } catch (Exception e) { Toast.MakeText(this, $"Failed to connect to {Title}", ToastLength.Short).Show(); Log.Error(TAG, $"Failed to start activity with error {e}."); Finish(); return(null); } }
protected override TwoLineListItem[] Transform(Api.Responses.Service model) { return(new TwoLineListItem[] { new TwoLineListItem { Line1 = "Version", Line2 = model.version }, new TwoLineListItem { Line1 = "Runtime", Line2 = string.Join(System.Environment.NewLine, model.versions.Select(m => $"{m.Name}@{m.Version}")) }, new TwoLineListItem { Line1 = "Resident Set Size", Line2 = UIConversion.FromBytes(model.memory.residentSetSize) }, new TwoLineListItem { Line1 = "Heap Used", Line2 = UIConversion.FromBytes(model.memory.heapUsed) }, new TwoLineListItem { Line1 = "Heap Total", Line2 = UIConversion.FromBytes(model.memory.heapTotal) }, }); }
protected override TwoLineListItem[] Transform(Api.Responses.Os model) { return(new TwoLineListItem[] { new TwoLineListItem { Line1 = "Uptime", Line2 = model.uptime }, new TwoLineListItem { Line1 = "Architecture", Line2 = model.arch }, new TwoLineListItem { Line1 = "Cpu(s)", Line2 = string.Join(System.Environment.NewLine, model.cpus.Select(cpu => cpu.model).GroupBy(s => s).Select(g => $"{g.Count()} x {g.First()}")) }, new TwoLineListItem { Line1 = "Free Memory", Line2 = UIConversion.FromBytes(model.freemem) }, new TwoLineListItem { Line1 = "Used Memory", Line2 = UIConversion.FromBytes(model.usedmem) }, new TwoLineListItem { Line1 = "Total Memory", Line2 = UIConversion.FromBytes(model.totalmem) }, }); }