Retorna o comprimento da fila de disco (E/S's em andamento).
*Inclui solicitações de E/S que foram emitidas para o driver de dispositivo, * mas ainda não foram concluídas. Não compatível com macOS.
* * @return Comprimento da fila de disco (E/S's em andamento). */ public Long getTamanhoAtualDaFila() { return disco.getCurrentQueueLength(); } /** * Retorna o tempo gasto lendo ou escrevendo no disco, em milissegundos. * * @return Tempo gasto lendo ou escrevendo no disco, em milissegundos. */ public Long getTempoDeTransferencia() { return disco.getTransferTime(); } /** * Retorna umaString com todas as informações relacionadas ao Disco.
* @return String com todas as informações relacionadas ao Disco.
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\nNome: ")
.append(getNome())
.append("\n");
sb.append("Modelo: ")
.append(getModelo())
.append("\n");
sb.append("Serial: ")
.append(getSerial())
.append("\n");
sb.append("Tamanho: ")
.append(getTamanho())
.append("\n");
sb.append("Leituras: ")
.append(getLeituras())
.append("\n");
sb.append("Bytes de leitura: ")
.append(getBytesDeLeitura())
.append("\n");
sb.append("Escritas: ")
.append(getEscritas())
.append("\n");
sb.append("Bytes de escritas: ")
.append(getBytesDeEscritas())
.append("\n");
sb.append("Tamanho atual da fila: ")
.append(getTamanhoAtualDaFila())
.append("\n");
sb.append("Tempo de transferência: ")
.append(getTempoDeTransferencia())
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/discos/DiscoGrupo.java
================================================
package com.github.britooo.looca.api.group.discos;
import java.util.List;
import java.util.stream.Collectors;
import oshi.SystemInfo;
import oshi.hardware.HWDiskStore;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OSFileStore;
import oshi.software.os.OperatingSystem;
public class DiscoGrupo {
private final SystemInfo system = new SystemInfo();
private final OperatingSystem os = system.getOperatingSystem();
private final HardwareAbstractionLayer hal = system.getHardware();
/**
* Retorna uma lista de Volume.
*
* @return Lista de Volume.
*/
public ListDisco.
*
* @return Lista de Disco.
*/
public List* Nome do sistema de arquivos. Um identificador legível que não necessariamente corresponde * a um caminho no sistema de arquivos. *
* * @return Nome do sistema de arquivos */ public String getNome() { return this.volume.getName(); } /** ** Nome do volume do sistema de arquivos. Geralmente um caminho que representa o dispositivo * (ex: /dev/foo) que foi montado. *
* * @return Nome do volume do sistema de arquivos */ public String getVolume() { return this.volume.getVolume(); } /** * Retorna espaço/capacidade total da unidade (Em bytes). * * @return Espaço/capacidade total da unidade (Em bytes). */ public Long getTotal() { return this.volume.getTotalSpace(); } /** *Retorna o espaço livre na unidade.
*Esse espaço não é alocado, mas pode exigir permissões elevadas para gravação (Em bytes).
* * @return Espaço livre na unidade (Em bytes). */ public Long getDisponivel() { return this.volume.getFreeSpace(); } /** * Retorna o tipo do sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). * * @return sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). */ public String getTipo() { return this.volume.getType(); } /** *Retorna o ponto de montagem do sistema de arquivos.
*O diretório que os usuários normalmente usarão para interagir com o armazenamento de arquivos. * (Exemplo C: no Windows ou / no Linux).
* * @return Ponto de montagem do sistema de arquivos. */ public String getPontoDeMontagem() { return this.volume.getMount(); } /** * Retorna umaString com todas as informações relacionadas ao Volume.
* @return String com todas as informações relacionadas ao Volume.
*/
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append("UUID: ").append(this.getUUID()).append("\n");
str.append("nome: ").append(this.getNome()).append("\n");
str.append("volume: ").append(this.getVolume()).append("\n");
str.append("total: ").append(this.getTotal()).append("\n");
str.append("disponível: ").append(this.getDisponivel()).append("\n");
str.append("tipo: ").append(this.getTipo()).append("\n");
str.append("ponto de montagem: ").append(this.getPontoDeMontagem()).append("\n");
return str.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivoUsb.java
================================================
package com.github.britooo.looca.api.group.dispositivos;
import oshi.hardware.UsbDevice;
public class DispositivoUsb {
private final UsbDevice usbDevice;
/**
* Retorna o nome do dispositivo.
*
* @return Nome do dispositivo.
*/
public String getNome() {
return usbDevice.getName();
}
/**
* Retorna o identificador do produto.
*
* @return O identificador do produto.
*/
public String getIdProduto() {
return usbDevice.getProductId();
}
/**
* Retorna o numero de serie.
*
* @return O número de série.
*/
public String getNumeroDeSerie() {
return usbDevice.getSerialNumber();
}
/**
* Retorna o identificador exclusivo do dispositivo.
*
* @return O identificador exclusivo do dispositivo.
*/
public String getIdDispositivoUsbExclusivo() {
return usbDevice.getUniqueDeviceId();
}
/**
* Retorna o nome do fornecedor identificado no dispositivo.
*
* @return O nome do fornecedor.
*/
public String getForncecedor() {
return usbDevice.getVendor();
}
/**
* Retorna o identificador do fornecedor.
*
* @return O identificador do fornecedor.
*/
public String getIdFornecedor() {
return usbDevice.getVendorId();
}
public DispositivoUsb(UsbDevice usbDevice) {
this.usbDevice = usbDevice;
}
@Override
public String toString() {
return String.format("\nNome: %s\nId produto: %s\nNúmero de série: %s\nId de dispositivo exclusivo: %s\nFornecedor: %s\nId fornecedor: %s\n",
getNome(), getIdProduto(), getNumeroDeSerie(), getIdDispositivoUsbExclusivo(), getForncecedor(), getIdFornecedor());
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivosUsbGrupo.java
================================================
package com.github.britooo.looca.api.group.dispositivos;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import oshi.SystemInfo;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.hardware.UsbDevice;
public class DispositivosUsbGrupo {
private final HardwareAbstractionLayer hardwareAbstractionLayer = new SystemInfo().getHardware();
/**
* Retorna o número de dispositivos USB.
*
* @return Número de dispositivos identificados como USB.
*/
public Integer getTotalDispositvosUsb() {
int totalDispositivosConectados = 0;
for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(false)) {
totalDispositivosConectados += item.getConnectedDevices().size();
}
return totalDispositivosConectados;
}
/**
* Retorna o número de dispositivos USB conectados.
*
* @return Número de dispositivos conectados identificados como USB.
*/
public Integer getTotalDispositvosUsbConectados() {
int totalDispositivosConectados = 0;
for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(true)) {
totalDispositivosConectados += item.getConnectedDevices().size();
}
return totalDispositivosConectados;
}
/**
* Retorna os dispositivos USB.
*
* @return Dispositivos identificados como USB.
*/
public Listtrue se a janela está visível para o usuário, caso contrário false.
*/
public Boolean isVisivel() {
return this.janela.isVisible();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("\n");
sb.append("PID: ").append(getPid()).append("\n");
sb.append("Id da janela: ").append(getJanelaId()).append("\n");
sb.append("Título: ").append(getTitulo()).append("\n");
sb.append("Comando: ").append(getComando()).append("\n");
sb.append("Localização: ").append(getLocalizacaoETamanho()).append("\n");
sb.append("Visível: ").append(isVisivel()).append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/janelas/JanelaGrupo.java
================================================
package com.github.britooo.looca.api.group.janelas;
import oshi.SystemInfo;
import oshi.software.os.OperatingSystem;
import java.util.List;
import java.util.stream.Collectors;
public class JanelaGrupo {
private final OperatingSystem so;
public JanelaGrupo(SystemInfo si) {
this.so = si.getOperatingSystem();
}
/**
* Retorna uma lista de Janelas visíveis e invisíveis abertas no sistema operacional.
*
* @return Lista de janelas.
*/
public ListString com todas as informações relacionadas a Memória.
* @return String com todas as informações relacionadas a Memória.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Memoria").append("\n");
sb.append("Em uso: ")
.append(Conversor.formatarBytes(getEmUso()))
.append("\n");
sb.append("Disponível: ")
.append(Conversor.formatarBytes(getDisponivel()))
.append("\n");
sb.append("Total: ")
.append(Conversor.formatarBytes(getTotal()))
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/processador/Processador.java
================================================
package com.github.britooo.looca.api.group.processador;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
public class Processador {
private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor();
private final ProcessadorCacheLoader processadorCacheLoader = new ProcessadorCacheLoader();
/**
* Retorna o nome do Fornecedor do processador.
*
* @return Nome do Fornecedor do processador.
*/
public String getFabricante() {
return this.processador.getProcessorIdentifier().getVendor();
}
/**
* Retorna o nome do Processador (Exemplo: Name, eg. Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz).
*
* @return Nome do Processador.
*/
public String getNome() {
return this.processador.getProcessorIdentifier().getName();
}
/**
* Retorna o ID do processador.
*Esta é uma String hexadecimal representando um valor de 8 bytes,
* normalmente obtido usando o opcode CPUID com o registrador EAX definido como 1.
* Os primeiros quatro bytes são o conteúdo resultante do registrador EAX,
* que é a assinatura do processador, representada em legível por humanos.
* Os quatro bytes restantes são o conteúdo do registrador EDX, contendo sinalizadores de recursos.
* Para processadores que não suportam o opcode CPUID,
* este campo é preenchido com uma String hexadecimal comparável.
*
Por exemplo, os processadores ARM preencherão os primeiros 32 bytes com o MIDR. * Os processadores AIX PowerPC retornarão o ID da máquina.
*NOTA: A ordem dos bytes retornados depende da plataforma e do software. * Os valores podem estar na ordem Big Endian ou Little Endian.
*NOTA: Se o Looca não conseguir determinar o ProcessorID a partir de fontes nativas, * ele tentará reconstruir um a partir das informações disponíveis no identificador do processador.
* * @return ID do processador. */ public String getId() { return this.processador.getProcessorIdentifier().getProcessorID(); } /** * Retorna o identificador, por exemplo: Família x86 6 Modelo 15 Etapa 10. * Para processadores diferentes de Intel ou AMD, essaString é preenchida com valores comparáveis.
*
* @return Identificador.
*/
public String getIdentificador() {
return this.processador.getProcessorIdentifier().getIdentifier();
}
/**
* Retorna a microarquitetura do processador, se conhecida.
* Caso contrário retorna a constante: Constant.UNKNOWN
*
* @return Microarquitetura do processador.
*/
public String getMicroarquitetura() {
return this.processador.getProcessorIdentifier().getMicroarchitecture();
}
/**
* Retorna a frequência do processador (em Hz), por exemplo.
* Para o processador denominado Intel(R) Core(TM)2 Duo CPU T7300 @ 2,00 GHz,
* a frequência do processador é 2000000000hz.
* Caso a frequência do processador seja desconhecido retorna -1;
*
* @return Frequência do processador.
*/
public Long getFrequencia() {
return this.processador.getProcessorIdentifier().getVendorFreq();
}
/**
* Retorna o número de pacotes/soquetes no sistema.
* Um único pacote pode conter vários núcleos.
*
* @return Número de pacotes físicos disponíveis.
*/
public Integer getNumeroPacotesFisicos() {
return this.processador.getPhysicalPackageCount();
}
/**
* Retorna o número de CPUs/núcleos físicos disponíveis para processamento.
*
* @return Número de CPUs físicas disponíveis.
*/
public Integer getNumeroCpusFisicas() {
return this.processador.getPhysicalProcessorCount();
}
/**
* Retorna o número de CPUs lógicas disponíveis para processamento.
* Este valor pode ser maior do que CPUs físicas se o hyperthreading estiver habilitado.
*
* @return Número de CPUs lógicas disponíveis.
*/
public Integer getNumeroCpusLogicas() {
return this.processador.getLogicalProcessorCount();
}
/**
* Retorna a porcentagem de uso do processador, por meio dos contadores de ticks de carga de CPU em todo o sistema.
** Por meio de um array com oito elementos representando milissegundos gastos nos estados: * User (0), Nice (1), System (2), Idle (3), IOwait (4), Hardware interrupts (IRQ) (5), * Software interrupts/DPC (SoftIRQ) ) (6) ou Steal (7).
*Ao medir a diferença entre os ticks em um intervalo de tempo, * a carga da CPU nesse intervalo pode ser calculada. * Observe que, embora os contadores de tiques estejam em unidades de milissegundos, * eles podem avançar em incrementos maiores junto com tiques de clock (dependentes da plataforma). * Por exemplo, por padrão, os tiques do clock do Windows são 1/64 de segundo (cerca de 15 ou 16 milissegundos) e os tiques do Linux dependem da distribuição e da configuração, * mas geralmente 1/100 de segundo (10 milissegundos).
*As informações de Nice e IOWait não estão disponíveis no Windows, * e as informações de IOwait e IRQ não estão disponíveis no macOS, portanto, * esses ticks sempre serão zero.
*Para calcular o tempo de inatividade geral usando esse método, * inclua os tiques de inatividade e IOWait. Da mesma forma, os ticks de IRQ, * SoftIRQ e Steal devem ser adicionados ao valor do sistema para obter o total. * Os tiques do sistema também incluem o tempo de execução de outros hosts virtuais (steal).
*Com isso fazemos o cálculo necessário para a medição em porcentagem do uso do processador.
* * @return Valor em porcentagem de uso do processador. */ public Double getUso() { return this.processadorCacheLoader.getUso(); } /** * Retorna umaString com todas as informações relacionadas ao Processador.
* @return String com todas as informações relacionadas ao Processador.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Fabricante: ")
.append(getFabricante())
.append("\n");
sb.append("Nome: ")
.append(getNome())
.append("\n");
sb.append("ID: ")
.append(getId())
.append("\n");
sb.append("Identificador: ")
.append(getIdentificador())
.append("\n");
sb.append("Microarquitetura: ")
.append(getMicroarquitetura())
.append("\n");
sb.append("Frequência: ")
.append(getFrequencia())
.append("\n");
sb.append("Número de Pacotes Físicos: ")
.append(getNumeroPacotesFisicos())
.append("\n");
sb.append("Número de CPUs Fisícas: ")
.append(getNumeroCpusFisicas())
.append("\n");
sb.append("Número de CPUs Lógicas: ")
.append(getNumeroCpusLogicas())
.append("\n");
sb.append("Em Uso: ")
.append(String.format("%.1f", getUso()))
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/processador/ProcessadorCacheLoader.java
================================================
package com.github.britooo.looca.api.group.processador;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListenableFutureTask;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
public class ProcessadorCacheLoader {
private final ExecutorService executor = Executors.newSingleThreadExecutor();
private final ListeningExecutorService lExecutor = MoreExecutors.listeningDecorator(executor);
private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor();
private final LoadingCacheRetorna o ID do processo.
*Embora seja um valor de 32 bits, ele não é assinado no Windows e, * em circunstâncias extremamente raras, pode retornar um valor negativo.
* * @return ID do processo. */ public Integer getPid() { return this.processo.getProcessID(); } /** * Retorna o nome do processo, geralmente o programa executável. * * @return Nome do processo, geralmente o programa executável. */ public String getNome() { return this.processo.getName(); } /** *Retorna o valor percentual de uso da CPU pelo processo.
** Por meio do cálculo: (100d * (o número de milissegundos que o processo executou no modo kernel/sistema. * + * Obtém o tempo do usuário usado pelo processo.) * / * o número de milissegundos desde o início do processo). * Assim conseguimos a porcentagem do uso de CPU pelo processo. *
* * @return Valor percentual de uso da CPU pelo processo. */ public Double getUsoCpu() { return (100d * (processo.getKernelTime() + processo.getUserTime()) / processo.getUpTime()); } /** *Retorna no Windows o tamanho do Conjunto de Trabalho Privado, que deve corresponder à coluna "Memória" no Gerenciador de Tarefas do Windows.
*Retorna no Linux o valor RSS de /proc/[pid]/stat, que pode ser impreciso devido a uma otimização de escalabilidade interna do kernel. Se forem necessários valores precisos, leia /proc/[pid]/smaps usando FileUtil.getKeyValueMapFromFile(String, String).
E por meio do cálculo: (100d * Obtém o tamanho do conjunto residente (RSS). Usado para mostrar quanta memória está alocada para esse processo e está na RAM. Não inclui memória que é trocada. Inclui memória de bibliotecas compartilhadas, desde que as páginas dessas bibliotecas estejam realmente na memória. Inclui toda a memória de pilha e heap. * Retorna (o tamanho do conjunto residente / A quantidade de memória física real, em bytes).
* * @return Valor percentual de uso da Memória RAM pelo processo. */ public Double getUsoMemoria() { return (100d * processo.getResidentSetSize() / memoria.getTotal()); } /** *Retorna o tamanho do conjunto residente (RSS). Usado para mostrar quanta memória está alocada para esse processo e está na RAM.
*Não inclui memória que é trocada. Inclui memória de bibliotecas compartilhadas, * desde que as páginas dessas bibliotecas estejam realmente na memória. * Inclui toda a memória de pilha e heap. * No Windows, retorna o tamanho do Conjunto de Trabalho Privado, * que deve corresponder à coluna "Memória" no Gerenciador de Tarefas do Windows.
*
* No Linux, retorna o valor RSS de /proc/[pid]/stat,
* que pode ser impreciso devido a uma otimização de escalabilidade interna do kernel.
* Se forem necessários valores precisos, leia /proc/[pid]/smaps usando
* FileUtil.getKeyValueMapFromFile(String, String).
*
Retorna o tamanho da memória virtual (VSZ).
*Inclui toda a memória que o processo pode acessar, * incluindo memória que é trocada e memória que é de bibliotecas compartilhadas.
* * @return Tamanho da memória virtual. */ public Long getMemoriaVirtualUtilizada() { return processo.getVirtualSize(); } /** * Retorna umaString com todas as informações relacionadas ao Processo.
* @return String com todas as informações relacionadas ao Grupo de Processos.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("PID: ").append(getPid())
.append("\n");
sb.append("Uso CPU: ")
.append(String.format("%.1f", getUsoCpu()))
.append("\n");
sb.append("Uso memória: ")
.append(String.format("%.1f", getUsoMemoria()))
.append("\n");
sb.append("Bytes utilizados: ")
.append(getBytesUtilizados())
.append("\n");
sb.append("Memória virtual utilizada: ")
.append(getMemoriaVirtualUtilizada())
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/processos/ProcessoGrupo.java
================================================
package com.github.britooo.looca.api.group.processos;
import java.util.List;
import oshi.SystemInfo;
import oshi.software.os.OSProcess;
import java.util.stream.Collectors;
import oshi.software.os.OperatingSystem;
import com.github.britooo.looca.api.group.memoria.Memoria;
public class ProcessoGrupo {
private final OperatingSystem os = new SystemInfo().getOperatingSystem();
/**
* Retorna o número de threads em execução.
*
* @return Número de threads em execução.
*/
public Integer getTotalThreads() {
return this.os.getThreadCount();
}
/**
* Retorna o número de processos em execução.
*
* @return Número de processos em execução.
*/
public Integer getTotalProcessos() {
return this.os.getProcessCount();
}
/**
* Retorna os processos em execução no momento. Nenhum pedido é garantido.
*Sendo uma lista de objetos OSProcess para o número especificado (ou todos) de processos atualmente em execução,
* classificados conforme especificado.
* A lista pode conter elementos nulos ou processos com estado OSProcess.State.INVALID se um processo for encerrado durante a iteração.
String com todas as informações relacionadas ao Grupo de Processos.
* @return String com todas as informações relacionadas ao Grupo de Processos.
*/
@Override
public String toString() {
return String.format("\nLista de processos\nTotal de processos ativos: %d\nTotal de threads: %d\nProcessos: %s",
this.getTotalProcessos(), this.getTotalThreads(), this.getProcessos());
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/rede/Rede.java
================================================
package com.github.britooo.looca.api.group.rede;
import oshi.SystemInfo;
public class Rede {
private final SystemInfo si;
public Rede(SystemInfo si) {
this.si = si;
}
/**
* Retorna um Objeto de RedeInterfaceGroup que contém métodos relacionados a coleta de informações de
* Interfaces de Rede físicas e virtuais disponíveis para uso no computador.
* @return Objeto RedeInterfaceGroup.
*/
public RedeInterfaceGroup getGrupoDeInterfaces() {
return new RedeInterfaceGroup(si);
}
/**
* Retorna um Objeto de RedeParametros que contém métodos relacionados a coleta de informações
* de Parâmetros de Rede do sistema operacional como username e domínio.
* @return Objeto RedeParametros.
*/
public RedeParametros getParametros() {
return new RedeParametros(si);
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/rede/RedeInterface.java
================================================
package com.github.britooo.looca.api.group.rede;
import oshi.hardware.NetworkIF;
import java.util.Arrays;
import java.util.List;
public class RedeInterface {
private final NetworkIF redeInterface;
public RedeInterface(NetworkIF redeInterface) {
this.redeInterface = redeInterface;
}
public static RedeInterface of(NetworkIF redeInterface) {
if (redeInterface == null) {
return null;
}
return new RedeInterface(redeInterface);
}
/**
* Retorna o nome da interface de rede.
*
* @return Nome da interface de rede.
*/
public String getNome() {
return this.redeInterface.getName();
}
/**
* Retorna a descrição da interface de rede.
*
* @return Descrição da interface.
*/
public String getNomeExibicao() {
return this.redeInterface.getDisplayName();
}
/**
* Retorna uma lista com os endereços de IP (v4) relacionados com essa interface de rede.
*
* @return Lista de endereços de IP
*/
public List* Retorna o estado do serviço. *
* * Ex:STOPPED, RUNNING.
*
* @return Estado do serviço.
*/
public String getEstado() {
return this.servico.getState().toString();
}
/**
* Retorna uma String com todas as informações relacionadas ao Serviço.
* @return String com todas as informações relacionadas ao Serviço.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("PID: ")
.append(getPid())
.append("\n");
sb.append("Nome: ")
.append(getNome())
.append("\n");
sb.append("Estado: ")
.append(getEstado())
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/servicos/ServicoGrupo.java
================================================
package com.github.britooo.looca.api.group.servicos;
import java.util.List;
import oshi.SystemInfo;
import java.util.stream.Collectors;
import oshi.software.os.OSService;
public class ServicoGrupo {
enum STATUS {
RUNNING,
STOPPED
}
private final SystemInfo sistema = new SystemInfo();
/**
* Devolve uma lista com todos os serviços
*
* @return Lista com todos os serviços
*/
public ListRUNNING (ou em execução)
*
* @return Lista de serviços ativos
*/
public ListSTOPPED (ou inativo)
*
* @return Lista de serviços inativos
*/
public ListTrue caso o processo atual tem permissões elevadas, como sudo/Administrador.
*
* @return True se este processo tiver permissões elevadas.
*/
public Boolean getPermissao() {
return this.os.isElevated();
}
/**
* Retorna uma String com todas as informações relacionadas ao Sistema Operacional.
* @return String que contém todas as informações relacionadas ao Sistema Operacional.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Sistema operacional: ")
.append(sistemaOperacional)
.append("\n");
sb.append("Fabricante: ")
.append(fabricante)
.append("\n");
sb.append("Arquitetura: ")
.append(arquitetura)
.append("bits\n");
sb.append("Inicializado: ")
.append(getInicializado())
.append("\n");
sb.append("Tempo de atividade: ")
.append(Conversor.formatarSegundosDecorridos(this.getTempoDeAtividade()))
.append("\n");
sb.append("Permissões: ")
.append(("Executando como "))
.append((this.getPermissao() ? "root" : "usuário padrão"))
.append("\n");
return sb.toString();
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/group/temperatura/Temperatura.java
================================================
package com.github.britooo.looca.api.group.temperatura;
import oshi.SystemInfo;
import oshi.hardware.HardwareAbstractionLayer;
public class Temperatura {
private final HardwareAbstractionLayer hardware;
public Temperatura() {
hardware = new SystemInfo().getHardware();
}
/**
* * Retorna a temperatura da CPU em graus Celsius se disponível, caso contrário retorna 0 ou Double.NaN. *
* ** No Windows, se não estiver executando o Open Hardware Monitor, * requer permissões elevadas e BIOS de hardware que ofereça suporte à publicação no WMI. * Neste caso, retorna a temperatura da "Zona Térmica" que pode ser diferente da temperatura da CPU * obtida de outras fontes. *
* ** Além disso, algumas placas-mãe só podem atualizar esse valor em determinados eventos. *
*
* @return Temperatura em graus Celsius caso disponível
*/
public Double getTemperatura() {
return this.hardware.getSensors().getCpuTemperature();
}
/**
* Retorna uma String com todas as informações relacionadas a Temperatura.
* @return String com todas as informações relacionadas a Temperatura.
*/
@Override
public String toString() {
return String.format("Temperatura: %.1f", getTemperatura());
}
}
================================================
FILE: src/main/java/com/github/britooo/looca/api/util/Conversor.java
================================================
package com.github.britooo.looca.api.util;
import java.util.concurrent.TimeUnit;
public class Conversor {
private static final long KIBI = 1L << 10;
private static final long MEBI = 1L << 20;
private static final long GIBI = 1L << 30;
private static final long TEBI = 1L << 40;
private static final long PEBI = 1L << 50;
private static final long EXBI = 1L << 60;
/**
* Retorna uma String com o valor em bytes convertidos em sua ordem de grandeza equivalente.
* @param bytes
* Corresponde a quantidade de bytes (Ex: 1000000000 bytes = 1 Gigabyte).
* @return Retorna uma String que corresponde aos bytes convertidos em sua ordem de grandeza equivalente.
*/
public static String formatarBytes(long bytes) {
if (bytes == 1L) { // bytes
return String.format("%d byte", bytes);
} else if (bytes < KIBI) { // bytes
return String.format("%d bytes", bytes);
} else if (bytes < MEBI) { // KiB
return formatarUnidades(bytes, KIBI, "KiB");
} else if (bytes < GIBI) { // MiB
return formatarUnidades(bytes, MEBI, "MiB");
} else if (bytes < TEBI) { // GiB
return formatarUnidades(bytes, GIBI, "GiB");
} else if (bytes < PEBI) { // TiB
return formatarUnidades(bytes, TEBI, "TiB");
} else if (bytes < EXBI) { // PiB
return formatarUnidades(bytes, PEBI, "PiB");
} else { // EiB
return formatarUnidades(bytes, EXBI, "EiB");
}
}
/**
* Retorna uma String com segundos convertidos em data;
* @param secs
* Corresponde aos segundos.
* @return Devolve uma String com os segundos convertidos em data.
*/
public static String formatarSegundosDecorridos(long secs) {
long eTime = secs;
final long days = TimeUnit.SECONDS.toDays(eTime);
eTime -= TimeUnit.DAYS.toSeconds(days);
final long hr = TimeUnit.SECONDS.toHours(eTime);
eTime -= TimeUnit.HOURS.toSeconds(hr);
final long min = TimeUnit.SECONDS.toMinutes(eTime);
eTime -= TimeUnit.MINUTES.toSeconds(min);
final long sec = eTime;
return String.format("%d days, %02d:%02d:%02d", days, hr, min, sec);
}
private static String formatarUnidades(long valor, long prefixo, String unidade) {
if (valor % prefixo == 0) {
return String.format("%d %s", valor / prefixo, unidade);
}
return String.format("%.1f %s", (double) valor / prefixo, unidade);
}
private static Double formatarUnidades(long valor, long prefixo) {
if (valor % prefixo == 0) {
return (double) valor / prefixo;
}
return (double) valor / prefixo;
}
}