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
-
@@ -361,8 +376,8 @@
View Bandwidth Graph
2147483647
-
-
+
+
@@ -373,8 +388,8 @@
Clients
2147483647
-
-
+
+
submenuAction:
@@ -449,8 +464,8 @@
IP
2147483647
-
-
+
+
submenuAction:
@@ -472,8 +487,8 @@
MAC
2147483647
-
-
+
+
submenuAction:
@@ -495,24 +510,24 @@
Connections
2147483647
-
-
+
+
@@ -527,8 +542,8 @@
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