17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* uptime.c - Tell how long the system has been running. 2cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer * 3cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com> 466643b4ea9bfab86a8cc1eab9f0ff5222a744bbcJeroen van Rijn * Copyright 2012 Luis Felipe Strano Moraes <lfelipe@profusion.mobi> 566643b4ea9bfab86a8cc1eab9f0ff5222a744bbcJeroen van Rijn * Copyright 2013 Jeroen van Rijn <jvrnix@gmail.com> 666643b4ea9bfab86a8cc1eab9f0ff5222a744bbcJeroen van Rijn 7cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 8cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De BrauwerUSE_UPTIME(NEWTOY(uptime, NULL, TOYFLAG_USR|TOYFLAG_BIN)) 9cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 10cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwerconfig UPTIME 117aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley bool "uptime" 127aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley default y 13561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley depends on TOYBOX_UTMPX 147aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley help 157aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley usage: uptime 16cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 177aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley Tell how long the system has been running and the system load 187aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley averages for the past 1, 5 and 15 minutes. 19cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer*/ 20cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 21cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer#include "toys.h" 22cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 23cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwervoid uptime_main(void) 24cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer{ 257aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley struct sysinfo info; 267aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time_t tmptime; 277aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley struct tm * now; 287aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley unsigned int days, hours, minutes; 29561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley struct utmpx *entry; 30561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley int users = 0; 317aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley 327aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley // Obtain the data we need. 337aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley sysinfo(&info); 347aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time(&tmptime); 357aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley now = localtime(&tmptime); 3646ddf0e34b03f7711a9c80f7a70dc8cbf732f782Isaac Dunham 3766643b4ea9bfab86a8cc1eab9f0ff5222a744bbcJeroen van Rijn // Obtain info about logged on users 38561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley setutxent(); 39561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley while ((entry = getutxent())) if (entry->ut_type == USER_PROCESS) users++; 40561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley endutxent(); 417aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley 427aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley // Time 437aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley xprintf(" %02d:%02d:%02d up ", now->tm_hour, now->tm_min, now->tm_sec); 447aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley // Uptime 457aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley info.uptime /= 60; 467aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley minutes = info.uptime%60; 477aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley info.uptime /= 60; 487aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley hours = info.uptime%24; 497aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley days = info.uptime/24; 507aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley if (days) xprintf("%d day%s, ", days, (days!=1)?"s":""); 517aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley if (hours) xprintf("%2d:%02d, ", hours, minutes); 527aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley else printf("%d min, ", minutes); 53561478541dbeb92e2c82c2fda7b43461293938e9Rob Landley printf(" %d user%s, ", users, (users!=1) ? "s" : ""); 5466643b4ea9bfab86a8cc1eab9f0ff5222a744bbcJeroen van Rijn printf(" load average: %.02f, %.02f, %.02f\n", info.loads[0]/65536.0, 557aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley info.loads[1]/65536.0, info.loads[2]/65536.0); 56cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer} 57