diff options
author | Simon Rettberg | 2015-12-02 15:43:40 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-12-02 15:43:40 +0100 |
commit | 4a3ea16925c56328f457720749375877d2eb086f (patch) | |
tree | 70bfdde8e2d9c117b8e3724db1e6e7ac0c910d87 /src/fuse/connection.c | |
parent | [FUSE] Request alt servers from connected server (diff) | |
download | dnbd3-4a3ea16925c56328f457720749375877d2eb086f.tar.gz dnbd3-4a3ea16925c56328f457720749375877d2eb086f.tar.xz dnbd3-4a3ea16925c56328f457720749375877d2eb086f.zip |
[FUSE] Add virtual status file
Diffstat (limited to 'src/fuse/connection.c')
-rw-r--r-- | src/fuse/connection.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/fuse/connection.c b/src/fuse/connection.c index 43e2907..a90a53c 100644 --- a/src/fuse/connection.c +++ b/src/fuse/connection.c @@ -213,6 +213,55 @@ void connection_close() pthread_mutex_unlock( &connection.sendMutex ); } +int connection_printStats(char *buffer, const int len) +{ + int ret; + int remaining = len; + if ( remaining > 0 ) { + ret = snprintf( buffer, remaining, "Image: %s\nRevision: %d\n\nCurrent connection time: %ds\n\n", + image.name, (int)image.rid, (int)( (nowMilli() - connection.startupTime) / 1000 ) ); + if ( ret > 0 ) { + remaining -= ret; + buffer += ret; + } + } + int i = -1; + pthread_spin_lock( &altLock ); + while ( remaining > 3 && ++i < MAX_ALTS ) { + if ( altservers[i].host.type == 0 ) + continue; + if ( isSameAddressPort( &connection.currentServer, &altservers[i].host ) ) { + *buffer++ = '*'; + } else { + *buffer++ = ' '; + } + ret = sock_printHost( &altservers[i].host, buffer, remaining ); + remaining -= (ret + 1); // For space or * above + buffer += ret; + if ( remaining < 3 ) + break; + int width = MAX( 35 - ret, 0 ); + char *unit; + int value, failSpaces; + if ( altservers[i].rtt > 5000 ) { + unit = "ms"; + value = altservers[i].rtt / 1000; + failSpaces = 6; + } else { + unit = "µs"; + value = altservers[i].rtt; + width += 3; + failSpaces = 3; + } + ret = snprintf( buffer, remaining, "% *d %s Unreachable: % *d\n", + width, value, unit, failSpaces, altservers[i].consecutiveFails ); + remaining -= ret; + buffer += ret; + } + pthread_spin_unlock( &altLock ); + return len - remaining; +} + static void* connection_receiveThreadMain(void *sockPtr) { int sockFd = (int)(size_t)sockPtr; |