Changeset 8908


Ignore:
Timestamp:
Aug 13, 2009, 3:54:54 AM (13 years ago)
Author:
charles
Message:

(trunk daemon) #2328: new enhancement: allow transmission-remote to query the daemon for stats (Waldorf)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/remote.c

    r8889 r8908  
    4141#define DEFAULT_PORT atoi(TR_DEFAULT_RPC_PORT_STR)
    4242
    43 enum { TAG_SESSION, TAG_LIST, TAG_DETAILS, TAG_FILES, TAG_PEERS };
     43enum { TAG_SESSION, TAG_STATS, TAG_LIST, TAG_DETAILS, TAG_FILES, TAG_PEERS };
    4444
    4545static const char*
     
    7575    { 'i', "info",                 "Show the current torrent(s)' details", "i",  0, NULL },
    7676    { 920, "session-info",         "Show the session's details", "si", 0, NULL },
     77    { 921, "session-stats",        "Show the session's statistics", "st", 0, NULL },
    7778    { 'l', "list",                 "List all torrents", "l",  0, NULL },
    7879    { 960, "move",                 "Move current torrent's data to a new folder", NULL, 1, "<path>" },
     
    557558                break;
    558559
     560            case 921:
     561                tr_bencDictAddStr( &top, "method", "session-stats" );
     562                tr_bencDictAddInt( &top, "tag", TAG_STATS );
     563                break;
     564               
    559565            case 930:
    560566                tr_bencDictAddStr( &top, "method", "torrent-set" );
     
    685691}
    686692
    687 static void
    688 etaToString( char *  buf,
    689              size_t  buflen,
    690              int64_t eta )
    691 {
    692     if( eta < 0 ) tr_snprintf( buf, buflen, "Unknown" );
    693     else if( eta < 60 ) tr_snprintf( buf, buflen, "%" PRId64 "sec", eta );
    694     else if( eta <
    695             ( 60 * 60 ) ) tr_snprintf( buf, buflen, "%" PRId64 " min",
    696                                        eta / 60 );
    697     else if( eta <
    698             ( 60 * 60 * 24 ) ) tr_snprintf( buf, buflen, "%" PRId64 " hrs",
    699                                            eta / ( 60 * 60 ) );
    700     else tr_snprintf( buf, buflen, "%" PRId64 " days", eta / ( 60 * 60 * 24 ) );
     693static char*
     694tr_strltime( char * buf, int seconds, size_t buflen )
     695{
     696    int  days, hours, minutes;
     697    char d[128], h[128], m[128], s[128];
     698
     699    if( seconds < 0 )
     700        seconds = 0;
     701
     702    days = seconds / 86400;
     703    hours = ( seconds % 86400 ) / 3600;
     704    minutes = ( seconds % 3600 ) / 60;
     705    seconds = ( seconds % 3600 ) % 60;
     706
     707    tr_snprintf( d, sizeof( d ), ngettext( "%'d day", "%'d days", days ), days );
     708    tr_snprintf( h, sizeof( h ), ngettext( "%'d hour", "%'d hours", hours ), hours );
     709    tr_snprintf( m, sizeof( m ), ngettext( "%'d minute", "%'d minutes", minutes ), minutes );
     710    tr_snprintf( s, sizeof( s ), ngettext( "%'d second", "%'d seconds", seconds ), seconds );
     711
     712    if( days )
     713    {
     714        if( days >= 4 || !hours )
     715            tr_strlcpy( buf, d, buflen );
     716        else
     717            tr_snprintf( buf, buflen, "%s, %s", d, h );
     718    }
     719    else if( hours )
     720    {
     721        if( hours >= 4 || !minutes )
     722            tr_strlcpy( buf, h, buflen );
     723        else
     724            tr_snprintf( buf, buflen, "%s, %s", h, m );
     725    }
     726    else if( minutes )
     727    {
     728        if( minutes >= 4 || !seconds )
     729            tr_strlcpy( buf, m, buflen );
     730        else
     731            tr_snprintf( buf, buflen, "%s, %s", m, s );
     732    }
     733    else tr_strlcpy( buf, s, buflen );
     734
     735    return buf;
    701736}
    702737
     
    921956
    922957static void
     958printSessionStats( tr_benc * top )
     959{
     960    tr_benc *args, *d;
     961    if( ( tr_bencDictFindDict( top, "arguments", &args ) ) )
     962    {
     963        char buf[512];
     964        int64_t up, down, secs, sessions;
     965
     966        if( tr_bencDictFindDict( args, "current-stats", &d )
     967            && tr_bencDictFindInt( d, "uploadedBytes", &up )
     968            && tr_bencDictFindInt( d, "downloadedBytes", &down )
     969            && tr_bencDictFindInt( d, "secondsActive", &secs ) )
     970        {
     971            printf( "\nCURRENT SESSION\n" );
     972            printf( "  Uploaded:   %s\n", strlsize( buf, up, sizeof( buf ) ) );
     973            printf( "  Downloaded: %s\n", strlsize( buf, down, sizeof( buf ) ) );
     974            printf( "  Ratio:      %s\n", strlratio( buf, up, down, sizeof( buf ) ) );
     975            printf( "  Duration:   %s\n", tr_strltime( buf, secs, sizeof( buf ) ) );
     976        }
     977
     978        if( tr_bencDictFindDict( args, "cumulative-stats", &d )
     979            && tr_bencDictFindInt( d, "sessionCount", &sessions )
     980            && tr_bencDictFindInt( d, "uploadedBytes", &up )
     981            && tr_bencDictFindInt( d, "downloadedBytes", &down )
     982            && tr_bencDictFindInt( d, "secondsActive", &secs ) )
     983        {
     984            printf( "\nTOTAL\n" );
     985            printf( "  Started %lu times\n", (unsigned long)sessions );
     986            printf( "  Uploaded:   %s\n", strlsize( buf, up, sizeof( buf ) ) );
     987            printf( "  Downloaded: %s\n", strlsize( buf, down, sizeof( buf ) ) );
     988            printf( "  Ratio:      %s\n", strlratio( buf, up, down, sizeof( buf ) ) );
     989            printf( "  Duration:   %s\n", tr_strltime( buf, secs, sizeof( buf ) ) );
     990        }
     991    }
     992}
     993
     994static void
    923995printDetails( tr_benc * top )
    924996{
     
    9691041
    9701042            if( tr_bencDictFindInt( t, "eta", &i ) )
    971             {
    972                 etaToString( buf, sizeof( buf ), i );
    973                 printf( "  ETA: %s\n", buf );
    974             }
     1043                printf( "  ETA: %s\n", tr_strltime( buf, i, sizeof( buf ) ) );
    9751044            if( tr_bencDictFindInt( t, "rateDownload", &i ) )
    9761045                printf( "  Download Speed: %.1f KB/s\n", i / 1024.0 );
     
    12921361
    12931362                if( leftUntilDone )
    1294                     etaToString( etaStr, sizeof( etaStr ), eta );
     1363                    tr_strltime( etaStr, eta, sizeof( etaStr ) );
    12951364                else
    12961365                    tr_snprintf( etaStr, sizeof( etaStr ), "Done" );
     
    13531422            case TAG_SESSION:
    13541423                printSession( &top ); break;
     1424
     1425            case TAG_STATS:
     1426                printSessionStats( &top ); break;
    13551427
    13561428            case TAG_FILES:
Note: See TracChangeset for help on using the changeset viewer.