using AgroBase.Models; using AgroBase.Models.Modules; using AgroBase.Properties; using AgroBase.Services; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace AgroBase.Forms.Operacoes { public partial class frmResultadosOperacao : Form { List LogsOperacao = new List(); List LogsGPS = new List(); List LogsDirecional = new List(); List LogsMovimentacao = new List(); List LogsAtuador = new List(); List LogsSensoriamento = new List(); List LogsPzem = new List(); List LogsWt901C = new List(); List LogsA05 = new List(); //List LogsKinect = new List(); List> LogsCam_Solo = new List>(); List pathImagensSolo = new List(); List picsCamSolo = new List(); List LogsCam_Caminho = new List(); string pathImagensCaminho = ""; string pathImagensSonarRGB = ""; string pathImagensMapaCalor = ""; DateTime MomentoAtual = DateTime.Now; AsyncTaskTimerModel tmrPlay; MapasModel Mapa = new MapasModel(); private Visualizador3DService visualizador3D; private MapaDinamicoModel MapaDinamico; private int idxMomentoAtual { get { return LogsOperacao.IndexOf(LogsOperacao.FirstOrDefault(x => x.Momento == MomentoAtual)); } } private int idxMomentoFiltro = 0; private List idxValoresFiltro = new List(); private string[] cmbItemsBuscaPor = new string[] { "Pico Máximo", "Pico Mínimo" }; GraficoInterativoModel graficoMovGeral; GraficoInterativoModel graficoMovTemperatura; GraficoInterativoModel graficoMovAlimentacao; GraficoInterativoModel graficoAtu; GraficoInterativoModel graficoSen; GraficoInterativoModel graficoCpu; GraficoInterativoModel graficoCameras; GraficoInterativoModel graficoErvas; public frmResultadosOperacao() { // Ativa o double buffering this.DoubleBuffered = true; this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); InitializeComponent(); InitializeGLControl(); } private void InitializeGLControl() { VersaoArquivoModel arquivo = VersionamentoService.ArquivoModelo3D("obj"); visualizador3D = new Visualizador3DService(); visualizador3D.InitializeGLControl(pnl3D, arquivo.CaminhoCompleto); } private void frmResultadosOperacao_Load(object sender, EventArgs e) { tmrPlay = new AsyncTaskTimerModel("tmrPlay", tmrPlay_Tick, 1000, this); picDIR_DF.Image = FuncoesGlobais.EspelharImagemHorizontalmente(Resources.roda_superior); picDIR_DT.Image = FuncoesGlobais.EspelharImagemHorizontalmente(Resources.roda_superior); MapaDinamico = new MapaDinamicoModel(this, pnlZoomMapa); } private async Task tmrPlay_Tick() { if (trbMomento.Value < trbMomento.Maximum) { trbMomento.Value++; } else { tmrPlay.Stop(); } } private void trbMomento_ValueChanged(object sender, EventArgs e) { MomentoAtual = LogsOperacao.Skip(trbMomento.Value).FirstOrDefault().Momento; AtualizarDadosMomento(); } private void btnPlay_Click(object sender, EventArgs e) { tmrPlay.Toogle(); btnPlay.Text = tmrPlay.IsRunning ? "Pause" : "Pay"; } private void btnCarregarOperacao_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Arquivos de Operação|*.lgop"; ofd.InitialDirectory = Application.StartupPath + "\\" + Variaveis.CaminhoOperacoes; if (ofd.ShowDialog() == DialogResult.OK) { OperacaoDadosModel data = JsonConvert.DeserializeObject(File.ReadAllText(ofd.FileName)); LogsOperacao = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.operacao)).ToList(); LogsGPS = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.gps ?? Enums.T_Code.Gps.ToString())).ToList(); LogsDirecional = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.dir ?? Enums.T_Code.Dir.ToString())).ToList(); LogsMovimentacao = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.mov ?? Enums.T_Code.Mov.ToString())).ToList(); LogsAtuador = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.atu ?? Enums.T_Code.Atu.ToString())).ToList(); LogsSensoriamento = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.sen ?? Enums.T_Code.Sen.ToString())).ToList(); LogsPzem = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.pzm ?? Enums.T_Code.Pzm.ToString())).ToList(); LogsWt901C = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.wit ?? Enums.T_Code.Wit.ToString())).ToList(); LogsA05 = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.a05 ?? Enums.T_Code.A05.ToString())).ToList(); //LogsKinect = JsonConvert.DeserializeObject(DeserializarDadosOperacao(ofd.FileName, data.knt ?? Enums.T_Code.Knt.ToString())).ToList(); LogsCam_Caminho = JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.cam_caminho)).ToList(); pathImagensSonarRGB = ofd.FileName.Replace("data.lgop", data.knt + "/rgb_"); pathImagensMapaCalor = ofd.FileName.Replace("data.lgop", data.knt + "/heat_"); pathImagensCaminho = ofd.FileName.Replace("data.lgop", data.cam_caminho + "/"); LogsCam_Solo = new List>(); pathImagensSolo = new List(); picsCamSolo = new List(); flwCameras.Controls.Clear(); foreach (string cam in data.cam_solo) { LogsCam_Solo.Add(JsonConvert.DeserializeObject(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, cam)).ToList()); pathImagensSolo.Add(ofd.FileName.Replace("data.lgop", cam + "/")); PictureBox pic = new PictureBox() { Name = "picCamSolo_" + cam, Width = 250, Height = 166, SizeMode = PictureBoxSizeMode.StretchImage }; flwCameras.Controls.Add(pic); picsCamSolo.Add(pic); } Mapa = new MapasModel() { pnlMapa = pnlMapa }; MapasService.CriarArquivoMapa(new List>() { LogsGPS }, 1517, data.id); Mapa.btnCarregar_Click(sender, e, Variaveis.CaminhoSistema + "/" + Variaveis.CaminhoMapasConvertidos + data.id + ".json"); trbMomento.Maximum = LogsOperacao.Count - 1; trbMomento.Minimum = 0; trbMomento.Value = 0; MomentoAtual = LogsOperacao[0].Momento; this.Text = "Resultados da Operação " + LogsOperacao[0].Momento.ToString("dd/MM/yyyy"); InicializarGraficos(); InicializarCombosBusca(); AtualizarDadosMomento(); } } private void InicializarGraficos() { var Momentos = LogsOperacao.Select(x => x.Momento.ToString("mm:ss:fff")).ToList(); graficoMovGeral = new GraficoInterativoModel(chartMovGeral, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "RPM SP", //Valores = LogsMovimentacao.GroupBy(x => new {ID = x.Modulo_ID, Momento = x.Momento}).Select(x => x.Average(y => y.RPM_SP)).ToList(), Valores = LogsOperacao.Select(x => (double)x.Controle.RPM_SP).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "EF SP", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.RPM_SP).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "EF Roda", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.RPM_Roda).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "EF Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.RPM_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "EF km/h", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Velocidade).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET SP", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.RPM_SP).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET Roda", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.RPM_Roda).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.RPM_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET km/h", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Velocidade).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT SP", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.RPM_SP).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT Roda", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.RPM_Roda).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.RPM_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT km/h", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Velocidade).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF SP", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.RPM_SP).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF Roda", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.RPM_Roda).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.RPM_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF km/h", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Velocidade).ToList(), Visivel = false, MostrarValor = true }, }); graficoMovTemperatura = new GraficoInterativoModel(chartMovTemperatura, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "EF Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Temperatura).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Temperatura).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Temperatura).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF Motor", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Temperatura).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "EF Driver", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.TemperaturaDriver).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "ET Driver", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.TemperaturaDriver).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DT Driver", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.TemperaturaDriver).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "DF Driver", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.TemperaturaDriver).ToList(), Visivel = false, MostrarValor = true }, }); graficoMovAlimentacao = new GraficoInterativoModel(chartMovTensao, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "V EF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Tensao).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V ET", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Tensao).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V DT", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Tensao).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V DF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Tensao).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AM EF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Corrente_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AM ET", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Corrente_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AM DT", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Corrente_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AM DF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Corrente_Motor).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AB EF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Corrente_Barramento).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AB ET", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Corrente_Barramento).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AB DT", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Corrente_Barramento).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "AB DF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Corrente_Barramento).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "W EF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.Potencia).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "W ET", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.Potencia).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "W DT", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.Potencia).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "W DF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.Potencia).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "% EF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "EF").Select(x => x.CicloTrabalho).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "% ET", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "ET").Select(x => x.CicloTrabalho).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "% DT", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DT").Select(x => x.CicloTrabalho).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "% DF", Valores = LogsMovimentacao.Where(x => x.Modulo_ID == "DF").Select(x => x.CicloTrabalho).ToList(), Visivel = false, MostrarValor = true }, }); graficoAtu = new GraficoInterativoModel(chartAtuador, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "Pressão SP", Valores = LogsAtuador.Select(x => x?.PressaoLinha_SP ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Pressão", Valores = LogsAtuador.Select(x => x?.PressaoLinha ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Potência", Valores = LogsAtuador.Select(x => x?.PotenciaBomba ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Volume", Valores = LogsAtuador.Select(x => x?.VolumeReservatorio ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Reservatório", Valores = LogsAtuador.Select(x => x?.PercentualReservatorio ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Vazão", Valores = LogsAtuador.Select(x => x?.VazaoFluxoMLpSMedia ?? 0).ToList(), Visivel = true, MostrarValor = true } }); graficoSen = new GraficoInterativoModel(chartSensoriamento, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "V 3v3", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("3V"))?.BusVoltage ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "A 3v3", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("3V"))?.Current ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V 5v0", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("5V"))?.BusVoltage ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "A 5v0", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("5V"))?.Current ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V 7v2", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("7V2"))?.BusVoltage ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "A 7v2", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("7V2"))?.Current ?? 0).ToList(), Visivel = false, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V 12v", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("12V"))?.BusVoltage ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "A 12v", Valores = LogsSensoriamento.Select(x => x?.SensoresCorrente?.FirstOrDefault(y => y.ID.Contains("12V"))?.Current ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "V Bat", Valores = LogsPzem.Select(x => x?.Tensao ?? 0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "A Bat", Valores = LogsPzem.Select(x => x?.Corrente ?? 0).ToList(), Visivel = true, MostrarValor = true } }); graficoCpu = new GraficoInterativoModel(chartCpu, Momentos, new List() { new GraficoInterativoSerieModel() { Titulo = "CPU %", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.CPU_load ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "GPU %", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.GPU_load ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "HDD %", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.HDD_load ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "RAM %", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.RAM_usage ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "CPU Temp", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.CPU_temp ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "GPU Temp", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.GPU_temp ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Threads Ativas", Valores = LogsOperacao.Select(x => (double)(x?.DadosPerformance.ActiveThreads ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Threads de Trabalho %", Valores = LogsOperacao.Select(x => (double)((x?.DadosPerformance.MaxWorkerThreads ?? 1) - (x?.DadosPerformance.WorkerThreads ?? 0)) / (x?.DadosPerformance.MaxWorkerThreads ?? 1) * 100.0).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = "Threads de Portas %", Valores = LogsOperacao.Select(x => (double)((x?.DadosPerformance.MaxCompletionPortThreads ?? 1) - (x?.DadosPerformance.CompletionPortThreads ?? 0)) / (x?.DadosPerformance.MaxCompletionPortThreads ?? 1) * 100.0).ToList(), Visivel = true, MostrarValor = true }, }); // Obtemos todos os tipos de ervas identificadas ao longo dos logs var todasErvas = LogsOperacao .SelectMany(log => log.Atuador.ErvasIdentificadas) .SelectMany(bico => bico.Keys) .Distinct() .ToList(); Dictionary> agrupamento = new Dictionary>(); foreach (var log in LogsOperacao) { if (!agrupamento.Any(x => x.Key == log.Momento)) { agrupamento.Add(log.Momento, new Dictionary()); } foreach (var bico in log.Atuador.ErvasIdentificadas) { if (bico.Any()) { foreach (var erva in bico) { if (!agrupamento[log.Momento].ContainsKey(erva.Key)) { agrupamento[log.Momento].Add(erva.Key, erva.Value); } else { agrupamento[log.Momento][erva.Key] += erva.Value; } } } } } graficoErvas = new GraficoInterativoModel(chartErvas, Momentos, new List( todasErvas .Select(erva => new GraficoInterativoSerieModel { Titulo = erva, Valores = LogsOperacao .Select(log => { if (agrupamento.ContainsKey(log.Momento) && agrupamento[log.Momento].ContainsKey(erva)) return (double)agrupamento[log.Momento][erva]; else return 0.0; // Adiciona zero se a erva não foi detectada neste momento }) .ToList(), Visivel = true, MostrarValor = true, ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Pie }) .ToList() ) ) { Titulo = "Ervas Identificadas" }; List seriesCamerasSolo = new List(); foreach (var camSolo in LogsCam_Solo) { string camNome = "Solo " + (LogsCam_Solo.IndexOf(camSolo) + 1); seriesCamerasSolo.AddRange(new List() { new GraficoInterativoSerieModel() { Titulo = $"{camNome} RAM %", Valores = camSolo.Select(x => (double)(x?.Leitura?.device_data?.Memory_Usage?.Percent ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} CPU Temp", Valores = camSolo.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.css ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} RAM Temp", Valores = camSolo.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.mss ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} VCC Temp", Valores = camSolo.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.upa ?? 0)).ToList(), Visivel = true, MostrarValor = true } }); } if (LogsCam_Caminho.Any(x => x.Leitura.device_data != null)) { var camCaminho = LogsCam_Caminho; string camNome = "Caminho"; seriesCamerasSolo.AddRange(new List() { new GraficoInterativoSerieModel() { Titulo = $"{camNome} RAM %", Valores = camCaminho.Select(x => (double)(x?.Leitura?.device_data?.Memory_Usage?.Percent ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} CPU Temp", Valores = camCaminho.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.css ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} RAM Temp", Valores = camCaminho.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.mss ?? 0)).ToList(), Visivel = true, MostrarValor = true }, new GraficoInterativoSerieModel() { Titulo = $"{camNome} VCC Temp", Valores = camCaminho.Select(x => (double)(x?.Leitura?.device_data?.Temperature?.upa ?? 0)).ToList(), Visivel = true, MostrarValor = true } }); } graficoCameras = new GraficoInterativoModel(chartCameras, Momentos, seriesCamerasSolo); } private void InicializarCombosBusca() { CarregarInformacoesBusca(gpbMOV_Alimentacao_Filtro, graficoMovAlimentacao.Series.Select(x => x.Titulo).ToArray()); CarregarInformacoesBusca(gpbMOV_Temperatura_Filtro, graficoMovTemperatura.Series.Select(x => x.Titulo).ToArray()); CarregarInformacoesBusca(gpbMOV_Geral_Filtro, graficoMovGeral.Series.Select(x => x.Titulo).ToArray()); CarregarInformacoesBusca(gpbSEN_Filtro, graficoSen.Series.Select(x => x.Titulo).ToArray()); CarregarInformacoesBusca(gpbCpu_Filtro, graficoCpu.Series.Select(x => x.Titulo).ToArray()); CarregarInformacoesBusca(gpbCameras_Filtro, graficoCameras.Series.Select(x => x.Titulo).ToArray()); } private void CarregarInformacoesBusca(GroupBox gpb, string[] Componentes) { ComboBox cmbFiltro = gpb.Controls.OfType().FirstOrDefault(x => x.Name.Contains("Filtro")); cmbFiltro.Items.Clear(); cmbFiltro.Items.AddRange(cmbItemsBuscaPor); ComboBox cmbComponente = gpb.Controls.OfType().FirstOrDefault(x => x.Name.Contains("Componente")); cmbComponente.Items.Clear(); cmbComponente.Items.AddRange(Componentes); cmbComponente.SelectedIndexChanged += cmbComponente_SelectedIndexChanged; Button btnRedefinir = gpb.Controls.OfType