#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define VERSION "1.00"

void showHelp()
{
    printf("Usage: getload [-v]\n");
    printf("    -v  display version\n");
}

void showVersion()
{
    printf("getload version %s\n", VERSION);
}

int getLoad(char *data)
{
    FILE *loadavg;
    char raw[32];
    
    loadavg = fopen("/proc/loadavg", "r");
    
    if (!loadavg)
    {
        return 0;
    }
    
    fgets(raw, sizeof(raw)-1, loadavg);

    fclose(loadavg);
    
    strcpy(data, raw);
    
    return 1;
}

int processOptions(int argc, char **argv)
{
    int c;
    int err = 0;
    
    opterr = 0;

    while ((c = getopt (argc, argv, "vh")) != -1)
    {
        switch (c)
        {
            case 'v':
                showVersion();
                err = 1;
                break;
            case 'h':
                showHelp();
                err = 1;
                break;
            case '?':
                printf("Unkown option -%c\n", optopt);
                break;
            default:
                printf("Unknown\n");
                break;
        }
    }

    return err;
}

/**
 * Outputs current server load along with timestamp in CSV format
 *
 * @author Nick Giles
 */
int main(int argc, char **argv)
{
    char loadavgraw[32];
    char loadavg[5] = "";

    /* Process options */
    if (processOptions(argc, argv))
    {
        return 1;
    }
    
    if (getLoad(loadavgraw))
    {
        
        strncpy(loadavg, loadavgraw, sizeof(loadavg)-1);
        
        printf("\"%d\",\"%s\"\n", (int) time(0), loadavg);

        return 0;
    }
    else
    {
        printf("Could not read /proc/loadavg\n");
        return 1;
    }
}
