From 3391af8ce573729edc233b9932ba199c1783883c Mon Sep 17 00:00:00 2001 From: Matthieu Lalonde Date: Tue, 7 Jun 2011 11:18:09 -0400 Subject: [PATCH] ADDED - Pulling of monthly traffic data --- DDWRT_MonitorAppDelegate.h | 14 +- DDWRT_MonitorAppDelegate.m | 105 +++++++++- English.lproj/MainMenu.xib | 379 ++++++++++++++++++++++--------------- 3 files changed, 333 insertions(+), 165 deletions(-) diff --git a/DDWRT_MonitorAppDelegate.h b/DDWRT_MonitorAppDelegate.h index bdd412c..6a96af3 100644 --- a/DDWRT_MonitorAppDelegate.h +++ b/DDWRT_MonitorAppDelegate.h @@ -57,6 +57,9 @@ IBOutlet NSMenuItem *menuWanDNSItem2; IBOutlet NSMenuItem *menuWanBandwidthGraph; + IBOutlet NSMenu *menuWanTraffic; + IBOutlet NSMenuItem *menuWanTrafficItem; + // Clients Menu Outlets IBOutlet NSMenu *menuClients; IBOutlet NSMenuItem *menuClientsItem; @@ -91,8 +94,12 @@ uint64_t _lastOutThroughput; @private - uint8_t _statusDataRequestNumber; - NSString *_statusStringData; + uint8_t _statusDataRequestNumber; + NSString *_statusStringData; + + uint8_t _transferDataRequestNumber; + NSString *_transferStringData; + NSMutableArray *_transferData; } # pragma mark Application Delegates: @@ -125,12 +132,14 @@ - (void) cbUpdateStatus; - (void) getThroughput:(NSTimer *)timer; - (void) cbThroughput:(NSData *)data; +- (void) getMonthlyTransfers:(NSData *)data; - (void) getRouterData:(NSData *)data; # pragma mark Menu Handlers: - (IBAction) refreshMenu:(id)sender; - (void) populateMenuSystem; - (void) populateMenuWan; +- (void) populateMenuWanTransfers; - (void) populateMenuClients; - (NSMenu *) createCopyMenuItem; @@ -140,5 +149,6 @@ - (NSString *) stringFromSize:(uint64_t)theBytes withUnits:(BOOL)withUnits; - (NSString *) stringFromSpeed:(uint64_t)theBytes; - (uint64_t) secondsFromUptimeString:(NSString *)uptime; +- (NSDate *) dateFromMonthsBack:(uint8_t)monthsBack; @end diff --git a/DDWRT_MonitorAppDelegate.m b/DDWRT_MonitorAppDelegate.m index 7de31b1..b3549c3 100644 --- a/DDWRT_MonitorAppDelegate.m +++ b/DDWRT_MonitorAppDelegate.m @@ -333,6 +333,7 @@ } [self enableDynamicMenus]; + [self getMonthlyTransfers:nil]; if (_updateTimer != nil) { [_updateTimer invalidate]; @@ -401,6 +402,54 @@ _lastOutThroughput = ifOut; } +- (void) getMonthlyTransfers:(NSData *)data +{ + if (data != nil) { + NSString *stringData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; + NSRange startRange = [stringData rangeOfString:@"id=\"label\""]; + NSString *smallData = [NSString stringWithString:[stringData substringFromIndex:startRange.location]]; + + NSString *keyIn = @"Incoming: "; + NSString *keyOut = @"Outgoing: "; + NSString *strMBytesIn = [smallData substringFromIndex:([smallData rangeOfString:keyIn].location + [keyIn length])]; + strMBytesIn = [strMBytesIn substringToIndex:[strMBytesIn rangeOfString:@" "].location]; + NSString *strMBytesOut = [smallData substringFromIndex:([smallData rangeOfString:keyOut].location + [keyOut length])]; + strMBytesOut = [strMBytesOut substringToIndex:[strMBytesOut rangeOfString:@" "].location]; + + if ([strMBytesIn isEqualToString:@"0"] == false) { + NSArray *monthData = [NSArray arrayWithObjects: strMBytesIn, strMBytesOut, nil]; + + [_transferData addObject:monthData]; + } + + [stringData release]; + [smallData release]; + } else { + //NSLog(@"%@", [NSDate date]); + _transferDataRequestNumber = 0; + [_transferData release]; + _transferData = [[NSMutableArray alloc]init]; + } + + if (_transferDataRequestNumber < 12) { + NSDate *previousMonthDate = [self dateFromMonthsBack:_transferDataRequestNumber]; + + NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; + [dateFormat setDateFormat:@"M-yyyy"]; + + NSString *url = [NSString stringWithFormat:@"ttgraph.cgi?%@", [dateFormat stringFromDate:previousMonthDate]]; + [wrt_request_client getStatusUpdate:url delegate:self callback:@selector(getMonthlyTransfers:)]; + _transferDataRequestNumber++; + } else { + /*uint8_t ii; + NSLog(@"%@", [NSDate date]); + for (ii=0; ii< [_transferData count]; ii++) { + NSLog(@"%d %@ %@", ii, [[_transferData objectAtIndex:ii] objectAtIndex:0], [[_transferData objectAtIndex:ii] objectAtIndex:1]); + }*/ + [self populateMenuWanTransfers]; + } +} + - (void) getRouterData:(NSData *)data { if (data != nil) { @@ -538,18 +587,18 @@ NSString *trafficIn = [wrt_request_client getKey:_statusStringData key:@"ttraff_in"]; NSString *trafficOut = [wrt_request_client getKey:_statusStringData key:@"ttraff_out"]; - uint64_t bytesIn = ([trafficIn longLongValue] * 1024 * 1024); - uint64_t bytesOut = ([trafficOut longLongValue] * 1024 * 1024); + uint64_t bytesIn = ([trafficIn longLongValue] * 1024 * 1024); + uint64_t bytesOut = ([trafficOut longLongValue] * 1024 * 1024); [menuWanTrafficIn setTitle:[NSString stringWithFormat:@"In: %@", [self stringFromSize:bytesIn]]]; [menuWanTrafficOut setTitle:[NSString stringWithFormat:@"Out: %@", [self stringFromSize:bytesOut]]]; - uint64_t secondsUp = [self secondsFromUptimeString:wanUptime]; - double speedIn = bytesIn / secondsUp; - double speedOut = bytesOut / secondsUp; + uint64_t secondsUp = [self secondsFromUptimeString:wanUptime]; + double speedIn = bytesIn / secondsUp; + double speedOut = bytesOut / secondsUp; - speedIn = round(2.2f * speedIn) / 2.2f; - speedOut = round(2.2f * speedOut) / 2.2f; + speedIn = round(2.2f * speedIn) / 2.2f; + speedOut = round(2.2f * speedOut) / 2.2f; [menuWanAvrgSpeedIn setTitle:[NSString stringWithFormat:@"Avrg In: %@/s", [self stringFromSpeed:speedIn]]]; [menuWanAvrgSpeedOut setTitle:[NSString stringWithFormat:@"Avrg Out: %@/s", [self stringFromSpeed:speedOut]]]; @@ -586,14 +635,39 @@ } } +- (void) populateMenuWanTransfers +{ + int8_t ii; + uint8_t count = [_transferData count]; + NSMenuItem *monthlyMenu; + for (ii = 0; ii < count; ii++) { + NSDate *previousMonthDate = [self dateFromMonthsBack:ii]; + + NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; + [dateFormat setDateFormat:@"M-yyyy"]; + + uint64_t bytesIn = ([[[_transferData objectAtIndex:ii] objectAtIndex:0] longLongValue] * 1024 * 1024); + uint64_t bytesOut = ([[[_transferData objectAtIndex:ii] objectAtIndex:1] longLongValue] * 1024 * 1024); + + NSString *strMonthtlyTitle = [NSString stringWithFormat:@"%@: %@/%@", [dateFormat stringFromDate:previousMonthDate], [self stringFromSize:bytesIn], [self stringFromSize:bytesOut]]; + + monthlyMenu = [[NSMenuItem alloc] initWithTitle:strMonthtlyTitle action:nil keyEquivalent:@""]; + [menuWanTraffic addItem:monthlyMenu]; + } +} + - (void) populateMenuClients { + /* NSString * clientsStringData; NSString *keyData = @"{arp_table::"; clientsStringData = [ _statusStringData substringFromIndex:([_statusStringData rangeOfString:keyData].location + [keyData length]) ]; clientsStringData = [ clientsStringData substringToIndex:[clientsStringData rangeOfString:@"}"].location ]; + */ + + NSString *clientsStringData = [wrt_request_client getKey:_statusStringData key:@"arp_table"]; // Remove any white spaces NSArray *parts = [clientsStringData componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; @@ -776,4 +850,21 @@ return seconds; } +- (NSDate *) dateFromMonthsBack:(uint8_t)monthsBack +{ + NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setMonth:(-monthsBack)]; + + NSDate *prevMonth = [gregorian dateByAddingComponents:components toDate:[NSDate date] options:0]; + + NSDateComponents *previoustMonthComponents = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit fromDate:prevMonth]; + + [components release]; + [gregorian autorelease]; + + return [gregorian dateFromComponents:previoustMonthComponents]; +} + @end diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index e46834f..6c02b30 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -69,11 +69,11 @@ System Status 2147483647 - + NSImage NSMenuCheckmark - + NSImage NSMenuMixedState @@ -89,8 +89,8 @@ router-name 2147483647 - - + + @@ -99,26 +99,26 @@ domain 2147483647 - - + + - + YES uptime 2147483647 - - + + - + YES load-average 2147483647 - - + + @@ -126,27 +126,27 @@ memory 2147483647 - - + + - + YES memory-indicator 2147483647 - - + + - + YES YES syslog-viewer 2147483647 - - + + @@ -157,8 +157,8 @@ WAN Status 2147483647 - - + + submenuAction: WAN Status @@ -170,8 +170,8 @@ Disconnected 2147483647 - - + + @@ -180,8 +180,8 @@ wan-uptime 2147483647 - - + + @@ -191,8 +191,8 @@ 2147483647 - - + + @@ -201,18 +201,18 @@ incoming-bandwidth 2147483647 - - + + - + YES YES incoming-avrg-speed 2147483647 - - + + @@ -221,18 +221,33 @@ outgoing-bandwidth 2147483647 - - + + - + YES YES outgoing-avrg-speed 2147483647 - - + + + + + + Monthly Traffic + + 2147483647 + + + submenuAction: + + Monthly Traffic + + YES + + @@ -241,16 +256,16 @@ 2147483647 - - + + WAN IP 2147483647 - - + + submenuAction: WAN IP @@ -261,8 +276,8 @@ Copy 2147483647 - - + + @@ -273,8 +288,8 @@ DNS 2147483647 - - + + submenuAction: DNS @@ -286,8 +301,8 @@ dns0 2147483647 - - + + submenuAction: dns0 @@ -298,8 +313,8 @@ Copy 2147483647 - - + + @@ -310,8 +325,8 @@ dns1 2147483647 - - + + submenuAction: dns1 @@ -322,8 +337,8 @@ Copy 2147483647 - - + + @@ -334,8 +349,8 @@ dns2 2147483647 - - + + submenuAction: dns2 @@ -346,8 +361,8 @@ Copy 2147483647 - - + + @@ -361,8 +376,8 @@ View Bandwidth Graph 2147483647 - - + + @@ -373,8 +388,8 @@ Clients 2147483647 - - + + submenuAction: Clients @@ -386,8 +401,8 @@ clients-count 2147483647 - - + + @@ -395,8 +410,8 @@ connections 2147483647 - - + + @@ -405,8 +420,8 @@ 2147483647 - - + + @@ -414,8 +429,8 @@ host-list-item 2147483647 - - + + submenuAction: host-list-item @@ -426,8 +441,8 @@ Hostname 2147483647 - - + + submenuAction: Hostname @@ -438,8 +453,8 @@ Copy 2147483647 - - + + @@ -449,8 +464,8 @@ IP 2147483647 - - + + submenuAction: IP @@ -461,8 +476,8 @@ Copy 2147483647 - - + + @@ -472,8 +487,8 @@ MAC 2147483647 - - + + submenuAction: MAC @@ -484,8 +499,8 @@ Copy 2147483647 - - + + @@ -495,24 +510,24 @@ Connections 2147483647 - - + + Interface 2147483647 - - + + Lease 2147483647 - - + + @@ -527,8 +542,8 @@ 2147483647 - - + + @@ -537,8 +552,8 @@ About 2147483647 - - + + @@ -546,8 +561,8 @@ , 1048576 2147483647 - - + + @@ -555,8 +570,8 @@ q 1048576 2147483647 - - + + @@ -1126,7 +1141,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES - + 8219 2 {{313, 762}, {768, 368}} @@ -1134,19 +1149,19 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA Syslog Viewer NSPanel - + 256 YES - - + + 274 {{0, 237}, {768, 131}} - + YES - + -2073952767 272764928 PDg1Pkp1biAgNiAxNzo0NzoyOCBkcm9wYmVhclsyMDExNl06IHB1YmtleSBhdXRoIHN1Y2NlZWRlZCBm @@ -1158,7 +1173,7 @@ ZCBFTk9CVUZTIGZyb20gc2VuZHRvKCksIHRlbXBvcmFyeSBzaG9ydGFnZSBvZiBidWZmZXIgbWVtb3J5 CjwzMD5KdW4gIDYgMTc6NTM6MDIgaG9zdGFwZDogYXRoMTogU1RBIDAwOjFiOjYzOjE1OjI4OjZlIFdQ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA - + YES @@ -1167,41 +1182,41 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA {{7, 11}, {768, 368}} - + {{0, 0}, {2048, 1130}} {1e+13, 1e+13} - + 268 YES - - + + 268 {{19, 1}, {170, 11}} - + 2 YES - + 68288064 138675200 000% - + - - + + 1282 {{19, 0}, {172, 12}} - - + + YES 2 16648 @@ -1210,7 +1225,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA {192, 13} - + YES 2 NSView @@ -1639,7 +1654,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuSystemUptime - + 844 @@ -1647,7 +1662,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuSystemLoad - + 845 @@ -1702,8 +1717,8 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA view - - + + 866 @@ -1719,7 +1734,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuSystemMemoryIndicator - + 868 @@ -1727,7 +1742,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuSystemMemoryPercentage - + 881 @@ -1735,7 +1750,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuWanAvrgSpeedIn - + 884 @@ -1743,10 +1758,26 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuWanAvrgSpeedOut - + 885 + + + menuWanTrafficItem + + + + 889 + + + + menuWanTraffic + + + + 890 + @@ -1867,8 +1898,9 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA - - + + + @@ -1894,11 +1926,11 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA YES - - + + - - + + @@ -2470,98 +2502,115 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA 842 - + 843 - + 857 - + YES - - + + MemoryProgressIndicator 860 - - + + 863 - + 869 - + 870 - + YES - + SyslogViewer 871 - + YES - + - + 876 - + YES - + - + 877 - - + + 878 - + YES - + - + MemoryIndicatorPercentage 879 - - + + 882 - + 883 - + + + + + 886 + + + YES + + + + 887 + + + YES + + + @@ -2710,6 +2759,8 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA 879.IBPluginDependency 882.IBPluginDependency 883.IBPluginDependency + 886.IBPluginDependency + 887.IBPluginDependency YES @@ -2897,6 +2948,8 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2911,7 +2964,7 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA - 885 + 890 @@ -3037,7 +3090,9 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuWanIP menuWanSeparator menuWanStatus + menuWanTraffic menuWanTrafficIn + menuWanTrafficItem menuWanTrafficOut menuWanUptime @@ -3083,6 +3138,8 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA NSMenuItem NSMenuItem NSMenuItem + NSMenu + NSMenuItem NSMenuItem NSMenuItem NSMenuItem @@ -3132,7 +3189,9 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuWanIP menuWanSeparator menuWanStatus + menuWanTraffic menuWanTrafficIn + menuWanTrafficItem menuWanTrafficOut menuWanUptime @@ -3298,10 +3357,18 @@ QTogZ3JvdXAga2V5IGhhbmRzaGFrZSBjb21wbGV0ZWQgKFJTTikKA menuWanStatus NSMenuItem + + menuWanTraffic + NSMenu + menuWanTrafficIn NSMenuItem + + menuWanTrafficItem + NSMenuItem + menuWanTrafficOut NSMenuItem