[refactor] about half way there refactoring everything

so i was refactoring everything to get as little duplicate code and
includes as possible when i realised there was a lot i could do, aka
there was a ton to do, so no new code, just refactoring and moving old
one
This commit is contained in:
Abdellah El Morabit 2025-10-11 22:33:20 +02:00
parent 9cd9987d7d
commit 99ace57358
3 changed files with 130 additions and 304 deletions

View File

@ -1,53 +1,71 @@
#ifdef __gnu_linux__ #include "lib.h"
#include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <stdint.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/sysinfo.h>
#include <math.h>
#define MAXC 1024 #define MAXC 1024
#define MAXC_CHAR 256 #define MAXC_CHAR 256
#define CONVERT_BYTES_TO_GIGABYTES 107374182
#define D 1073741824
typedef struct { typedef struct {
int frequency; int frequency;
int temperature;
char* name; char* name;
int threads; int threads;
} cpu_s; } cpu_s;
typedef struct { typedef struct {
unsigned long total;
unsigned long mem_size; unsigned long available;
} ram_s; } ram_s;
typedef struct {
long long size;
short name;
} disk_s;
void *cpu_name(); typedef struct {
void *cpu_temperature(void); char* name;
void *cpu_frequency(void); char* hostname;
char* os_version;
} device_s;
unsigned long get_total(void); void cpu_name();
unsigned long get_usage(void); void cpu_threads();
unsigned long device_up_time(void); void cpu_temperature();
void cpu_frequency();
void name(); void get_total();
void temperature(); void get_usage();
void freq();
void mem_size();
void av_mem_size();
void device_up_time();
void device_os_version();
void device_hostname();
cpu_s _cpu; cpu_s _cpu;
ram_s _ram; ram_s _ram;
disk_s _disk;
device_s _device;
void *cpu_name(){
#ifdef __gnu_linux__
#include <sys/sysinfo.h>
void cpu_name(){
int buffer_size = 256; int buffer_size = 256;
char cpu_name[buffer_size]; char cpu_name[buffer_size];
printf("Opening the CPU information files");
FILE *fp = fopen("/proc/cpuinfo", "r"); FILE *fp = fopen("/proc/cpuinfo", "r");
if (!fp) if (!fp)
perror("can't open /proc/cpuinfo"); perror("can't open /proc/cpuinfo");
@ -71,10 +89,9 @@ void *cpu_name(){
_cpu.name = cpu_name; _cpu.name = cpu_name;
return NULL;
} }
char* cpu_frequency() { void cpu_frequency() {
char* buffer = malloc(MAXC_CHAR); char* buffer = malloc(MAXC_CHAR);
FILE *fp = fopen("/proc/cpuinfo", "r"); FILE *fp = fopen("/proc/cpuinfo", "r");
@ -100,7 +117,21 @@ char* cpu_frequency() {
return NULL; return NULL;
} }
unsigned long get_total(void){ unsigned long get_total(){
struct sysinfo info;
if (sysinfo(&info) != 0) {
perror("sysinfo");
return 1;
}
long total_ram = info.totalram * info.mem_unit;
return total_ram;
}
void mem_size(){
struct sysinfo info; struct sysinfo info;
@ -114,7 +145,7 @@ unsigned long get_total(void){
} }
unsigned long get_usage(void) void av_mem_size()
{ {
struct sysinfo info; struct sysinfo info;
@ -130,7 +161,7 @@ unsigned long get_usage(void)
} }
void cpu_temperature(unsigned short delay) void cpu_temperature()
{ {
while (1) while (1)
{ {
@ -151,47 +182,7 @@ void cpu_temperature(unsigned short delay)
} }
} }
char* cpu_frequency(void) { unsigned long get_usage()
char* buffer = malloc(MAXC_CHAR);
FILE *fp = fopen("/proc/cpuinfo", "r");
if (!fp) {
printf("can't open /proc/cpuinfo");
return NULL;
}
while (fgets(buffer, MAXC_CHAR, fp)) {
if (strstr(buffer, "cpu MHz") != NULL)
{
char *colon = strchr(buffer, ':');
if (colon)
{
buffer[strcspn(buffer, "\n")] = 0;
snprintf(buffer, MAXC_CHAR, "%s", colon);
}
}
fclose(fp);
return buffer;
}
return NULL;
}
unsigned long get_total(void){
struct sysinfo info;
if (sysinfo(&info) != 0) {
perror("sysinfo");
return 1;
}
long total_ram = info.totalram * info.mem_unit;
return total_ram;
}
unsigned long get_usage(void)
{ {
struct sysinfo info; struct sysinfo info;
@ -206,7 +197,7 @@ unsigned long get_usage(void)
return total_ram - free_ram; return total_ram - free_ram;
} }
unsigned long device_up_time(void){ unsigned long device_up_time(){
struct sysinfo info; struct sysinfo info;
if (sysinfo(&info) == -1) if (sysinfo(&info) == -1)
perror("sysinfo"); perror("sysinfo");
@ -218,75 +209,9 @@ unsigned long device_up_time(void){
#ifdef __APPLE__ #ifdef __APPLE__
#include <sys/types.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stddef.h>
#include <stdint.h>
#include <cjson/cJSON.h>
#define CONVERT_BYTES_TO_GIGABYTES 107374182 void cpu_name() {
#define D 1073741824
typedef struct{
char* name;
char* hostname;
char* os_version;
} device_s;
typedef struct {
int frequency;
char* name;
int threads;
} cpu_s;
typedef struct {
long double total;
long double available;
} ram_s;
typedef struct {
long long size;
short name;
} disk_s;
typedef struct {
cpu_s* cpu;
ram_s* ram;
disk_s* disk;
device_s* device;
} info;
typedef struct {
unsigned long mem_size;
} ram;
void* cpu_name();
void* cpu_thread_count();
unsigned long get_total();
unsigned long get_usage();
unsigned long device_up_time();
float cpu_frequency();
void size();
void av_size();
void* ram_i();
ram_s _ram;
cpu_s _cpu;
device_s _device;
void *cpu_name() {
char *name; char *name;
size_t len = 0; size_t len = 0;
@ -300,35 +225,54 @@ void *cpu_name() {
perror("error in assigning the value to the cpu name variable\n"); perror("error in assigning the value to the cpu name variable\n");
free(name); free(name);
return NULL; return;
} }
_cpu.name = name; _cpu.name = name;
return NULL; return;
} }
void *cpu_threads() { void cpu_threads() {
int count; int count;
size_t len = sizeof(count); size_t len = sizeof(count);
if (sysctlbyname("machdep.cpu.thread_count", &count, &len, NULL, 0) < 0) if (sysctlbyname("machdep.cpu.thread_count", &count, &len, NULL, 0) < 0)
perror("error in retrieving the cpu threads count\n"); perror("error in retrieving the cpu threads count\n");
cpu.threads = count; _cpu.threads = count;
return NULL; return;
} }
void *cpu_info() { void cpu_frequency(){
uint64_t freq = 0;
size_t size = sizeof(freq);
cpu_threads(); if (sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0) < 0)
cpu_name(); {
perror("sysctl");
printf("cpu name: %s\ncpu threads: %d\n", _cpu.name, _cpu.threads); }
return NULL; return;
} }
void mem_size() {
int64_t size;
size_t len = sizeof(size);
if (sysctlbyname("hw.memsize", &size, &len, NULL, 0) < 0)
perror("error in retrieving the memory size");
void *device_name(){ _ram.total = size / D;
}
void mem_av_size() {
int64_t size;
size_t len = sizeof(size);
if (sysctlbyname("hw.memsize_usable", &size, &len, NULL, 0) < 0)
perror("error in retrieving the available memory size");
_ram.available = size / D;
}
void device_hostname(){
char *name; char *name;
size_t size = 0; size_t size = 0;
@ -341,52 +285,46 @@ void *device_name(){
if(sysctlbyname("kern.hostname", name, &size, NULL, 0) < 0){ if(sysctlbyname("kern.hostname", name, &size, NULL, 0) < 0){
perror("failed retrieving the hostname: \n"); perror("failed retrieving the hostname: \n");
free(name); free(name);
return NULL; return ;
} }
_device.name = name; _device.name = name;
return NULL; return ;
} }
unsigned long device_up_time(void){ void device_up_time(){
struct timeval boottime; struct timeval boottime;
size_t len = sizeof(boottime); unsigned long len = sizeof(boottime);
if (sysctlbyname("kern.boottime", &boottime, len, NULL, 0) == -1){ if (sysctlbyname("kern.boottime", &boottime, NULL, NULL, NULL) == -1){
perror("sysctl error"); perror("sysctl error");
return 1; return;
} }
} }
void device_model(){
char *model_name;
void *device_hostname(){
char *hostname;
size_t size = 0; size_t size = 0;
if (sysctlbyname("hw.model", NULL, &size, NULL, 0) < 0) if (sysctlbyname("hw.model", NULL, &size, NULL, 0) < 0)
perror("failed retrieving the hostname: \n"); perror("failed retrieving the model name: \n");
hostname = malloc(size); model_name = malloc(size);
if(sysctlbyname("hw.model", hostname, &size, NULL, 0) < 0){ if(sysctlbyname("hw.model", model_name, &size, NULL, 0) < 0){
perror("failed retrieving the hostname: \n"); perror("failed retrieving the hostname: \n");
free(hostname); free(model_name);
return NULL; return;
} }
_device.hostname = hostname; _device.hostname = hostname;
return NULL; return;
} }
void device_os_version() {
void *device_os_version() {
char *os_version; char *os_version;
size_t size = 0; size_t size = 0;
@ -399,97 +337,15 @@ void *device_os_version() {
if(sysctlbyname("kern.ostype", os_version, &size, NULL, 0) < 0){ if(sysctlbyname("kern.ostype", os_version, &size, NULL, 0) < 0){
perror("failed retrieving the os version: \n"); perror("failed retrieving the os version: \n");
free(os_version); free(os_version);
return NULL; return ;
} }
device_info.os_version = os_version; _device.os_version = os_version;
return NULL; return;
} }
void *get_device_info() {
device_name();
device_hostname();
printf("device name: %s\ndevice model: %s\n", device_info.name, device_info.model);
return NULL;
}
void *mem_size() {
int64_t size;
size_t len = sizeof(size);
if (sysctlbyname("hw.memsize", &size, &len, NULL, 0) < 0)
perror("error in retrieving the memory size");
data.total = size / D;
return NULL;
}
void av_size() {
int64_t size;
size_t len = sizeof(size);
if (sysctlbyname("hw.memsize_usable", &size, &len, NULL, 0) < 0)
perror("error in retrieving the available memory size");
data.available = size / D;
return NULL;
}
void ram_info() {
size();
av_size();
printf("available ram: %LF\n", data.available);
printf("total ram: %LF\n", data.total);
return NULL;
}
void* ram_i(){
printf("thread is working");
return NULL;
}
float cpu_frequency(void){
uint64_t freq = 0;
size_t size = sizeof(freq);
if (sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0) < 0)
{
perror("sysctl");
}
return freq;
}
unsigned long get_usage(void) {
struct rusage usage;
if(0 == getrusage(RUSAGE_SELF, &usage))
return usage.ru_maxrss / CONVERT_BYTES_TO_GIGABYTES ;
else
return 0;
}
unsigned long get_mem(void){
int mib[2];
size_t size;
uint64_t ram_size;
mib[0] = CTL_HW;
mib[1] = HW_MEMSIZE;
size = sizeof(ram_size);
if (sysctl(mib, 2, &ram_size, &size, NULL, 0) == -1) {
perror("sysctl");
}
return ram_size;
}
#endif #endif

View File

@ -3,57 +3,21 @@
#ifdef __APPLE__ #ifdef __APPLE__
typedef struct{ void get_device_info();
char* name; void disk_size();
} device_s;
typedef struct {
int frequency;
char* name;
int threads;
} cpu_s;
typedef struct {
long double total;
long double available;
} ram_s;
typedef struct {
long long size;
short name;
} disk_s;
extern device_s device_info;
void* get_device_info();
void* disk_size();
void* size();
void* av_size();
void* ram_info();
float cpu_frequency(void);
char* cpu_name(void);
void *cpu_name();
void *cpu_threads();
void *cpu_info();
#endif
#ifdef __gnu_linux__
void cpu_name();
void cpu_freq();
void cpu_temperature();
void *cpu_i(void *a);
void size(); void size();
void av_size(); void av_size();
void *ram_i(void *a); void ram_info();
float cpu_freq(void); void cpu_frequency();
char* cpu_name(void); void cpu_name();
void cpu_temperature(void); void cpu_threads();
void cpu_name();
void cpu_temperature();
void cpu_frequency();
void mem_size();
void mem_av_size();
#endif #endif
#endif

View File

@ -5,7 +5,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
cJSON convert_to_json(info info) { /*
cJSON convert_to_json() {
cJSON *root = cJSON_CreateObject(); cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "cpu", info.cpu->name); cJSON_AddStringToObject(root, "cpu", info.cpu->name);
@ -15,8 +16,9 @@ cJSON convert_to_json(info info) {
return *root; return *root;
} }
* */
void handler(char *url, cJSON object) { void handler(char *url) {
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
@ -26,7 +28,11 @@ void handler(char *url, cJSON object) {
if (curl) { if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, object);
// TO DO
// parse the object to a json and pass that as an argument to post it
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, NULL);
res = curl_easy_perform(curl); res = curl_easy_perform(curl);
if (res != CURLE_OK) if (res != CURLE_OK)