#include <stdio.h>
#define _GNU_SOURCE
#include <stdlib.h>
#include <string.h>

#include "socket.h"
#include "intrepidcommon.h"

static unsigned long int get_cpu_mips ()
   {
   FILE *fp;
   unsigned long int retval = 0;
   char *colon_pos;
   
   char buffer [1025];

   if ((fp = fopen ("/proc/cpuinfo", "r")) == NULL)
      return 0;
   
   while (! feof (fp))
      {
      fgets (buffer, 1024, fp);
      if (strncmp (buffer, "bogomips", 8) == 0)
	 {
	 colon_pos = strchr (buffer, ':');
	 retval = strtoul (&colon_pos[1], NULL, 10); 
	 break;
	 }
      }
   
   fclose (fp);
   
   return retval;
   }

static unsigned long int get_mem_total ()
   {
   FILE *fp;
   unsigned long int retval = 0;
   char buffer [1025];
   
   if ((fp = fopen ("/proc/meminfo", "r")) == NULL)
      return 0;

   while (! feof (fp))
      {
      fgets (buffer, 1024, fp);
      if (strncmp (buffer, "MemTotal", 8) == 0)
	 {
	 retval = strtoul (&buffer[9], NULL, 10);
	 break;
	 }
      }   
   
   fclose (fp);
   
   return retval;
   }

int main (int argc, char *argv[])
   {
   char *server;
   asocket *sock;
   double load_avgs[3], load_avg;  
   unsigned long int mem_total, cpu_mips;
   char buffer[20];
      
      
   if (argc != 2)
      {
      fprintf (stderr, "Usage: %s hostname\n", argv[0]);
      return EXIT_FAILURE;
      }

   server = argv[1];
   
   if (getloadavg (load_avgs, 3) != -1)
      load_avg = load_avgs[0]; /* 1 minute */
   else
      load_avg = 1.0; /* max ??? */
   
   cpu_mips = get_cpu_mips ();
   mem_total = get_mem_total ();
   
   printf ("cpu_mips: %lu\nmem_free: %lu\nload_avg: %f\n", cpu_mips, mem_total, load_avg);
   
   sock = socket_connect (server, LBPORT);
   
   socket_sendline (sock, "SLAVE");
   
   sprintf (buffer, "%lu", mem_total);
   socket_sendline (sock, buffer);

   sprintf (buffer, "%f", load_avg);   
   socket_sendline (sock, buffer);
   
   socket_destroy (sock);
   
   return EXIT_SUCCESS;
   }
