mirror of
https://github.com/gnustep/libs-ec.git
synced 2025-02-21 02:41:11 +00:00
add deletion to make disk space, and compression in separate thread.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/ec/trunk@36880 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8192603611
commit
ddc69229b0
1 changed files with 106 additions and 15 deletions
121
EcCommand.m
121
EcCommand.m
|
@ -39,6 +39,8 @@
|
||||||
|
|
||||||
#define DLY 300.0
|
#define DLY 300.0
|
||||||
|
|
||||||
|
static const NSTimeInterval day = 24.0 * 60.0 * 60.0;
|
||||||
|
|
||||||
static int tStatus = 0;
|
static int tStatus = 0;
|
||||||
|
|
||||||
static NSTimeInterval pingDelay = 240.0;
|
static NSTimeInterval pingDelay = 240.0;
|
||||||
|
@ -176,6 +178,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
- (void) logMessage: (NSString*)msg
|
- (void) logMessage: (NSString*)msg
|
||||||
type: (EcLogType)t
|
type: (EcLogType)t
|
||||||
name: (NSString*)c;
|
name: (NSString*)c;
|
||||||
|
- (NSString*) makeSpace;
|
||||||
- (void) newConfig: (NSMutableDictionary*)newConfig;
|
- (void) newConfig: (NSMutableDictionary*)newConfig;
|
||||||
- (void) pingControl;
|
- (void) pingControl;
|
||||||
- (void) quitAll;
|
- (void) quitAll;
|
||||||
|
@ -2045,9 +2048,70 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) ecNewHour: (NSCalendarDate*)when
|
- (NSString*) makeSpace
|
||||||
|
{
|
||||||
|
NSInteger deleteAfter;
|
||||||
|
NSTimeInterval latestDeleteAt;
|
||||||
|
NSTimeInterval now;
|
||||||
|
NSTimeInterval ti;
|
||||||
|
NSFileManager *mgr;
|
||||||
|
NSCalendarDate *when;
|
||||||
|
NSString *logs;
|
||||||
|
NSString *file;
|
||||||
|
NSString *gone;
|
||||||
|
NSAutoreleasePool *arp;
|
||||||
|
|
||||||
|
gone = nil;
|
||||||
|
arp = [NSAutoreleasePool new];
|
||||||
|
when = [NSCalendarDate date];
|
||||||
|
now = [when timeIntervalSinceReferenceDate];
|
||||||
|
|
||||||
|
logs = [[self ecUserDirectory] stringByAppendingPathComponent: @"Logs"];
|
||||||
|
|
||||||
|
/* When trying to make space, we can delete up to the point when we
|
||||||
|
* would start compressing but no further ... we don't want to delete
|
||||||
|
* all logs!
|
||||||
|
*/
|
||||||
|
deleteAfter = [[self cmdDefaults] integerForKey: @"CompressLogsAfter"];
|
||||||
|
if (deleteAfter < 1)
|
||||||
|
{
|
||||||
|
deleteAfter = 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
mgr = [NSFileManager defaultManager];
|
||||||
|
|
||||||
|
if (0.0 == undeleted)
|
||||||
|
{
|
||||||
|
undeleted = now - 365.0 * day;
|
||||||
|
}
|
||||||
|
ti = undeleted;
|
||||||
|
latestDeleteAt = now - day * deleteAfter;
|
||||||
|
while (nil == gone && ti < latestDeleteAt)
|
||||||
|
{
|
||||||
|
when = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: ti];
|
||||||
|
file = [[logs stringByAppendingPathComponent:
|
||||||
|
[when descriptionWithCalendarFormat: @"%Y-%m-%d"]]
|
||||||
|
stringByStandardizingPath];
|
||||||
|
if ([mgr fileExistsAtPath: file])
|
||||||
|
{
|
||||||
|
[mgr removeFileAtPath: file handler: nil];
|
||||||
|
gone = [when descriptionWithCalendarFormat: @"%Y-%m-%d"];
|
||||||
|
}
|
||||||
|
ti += day;
|
||||||
|
}
|
||||||
|
undeleted = ti;
|
||||||
|
RETAIN(gone);
|
||||||
|
DESTROY(arp);
|
||||||
|
return AUTORELEASE(gone);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform this one in another thread.
|
||||||
|
* The sweep operation may compress really large logfiles and could be
|
||||||
|
* very slow, so it's performed in a separate thread to avoid blocking
|
||||||
|
* normal operations.
|
||||||
|
*/
|
||||||
|
- (void) sweep: (NSCalendarDate*)when
|
||||||
{
|
{
|
||||||
static const NSTimeInterval day = 24.0 * 60.0 * 60.0;
|
|
||||||
NSInteger compressAfter;
|
NSInteger compressAfter;
|
||||||
NSInteger deleteAfter;
|
NSInteger deleteAfter;
|
||||||
NSTimeInterval latestCompressAt;
|
NSTimeInterval latestCompressAt;
|
||||||
|
@ -2059,14 +2123,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
NSString *file;
|
NSString *file;
|
||||||
NSAutoreleasePool *arp;
|
NSAutoreleasePool *arp;
|
||||||
|
|
||||||
if (sweeping == YES)
|
|
||||||
{
|
|
||||||
NSLog(@"Argh - nested sweep attempt");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sweeping = YES;
|
|
||||||
|
|
||||||
arp = [NSAutoreleasePool new];
|
arp = [NSAutoreleasePool new];
|
||||||
now = [when timeIntervalSinceReferenceDate];
|
now = [when timeIntervalSinceReferenceDate];
|
||||||
|
|
||||||
|
@ -2089,7 +2145,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
deleteAfter = compressAfter;
|
deleteAfter = compressAfter;
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr = [NSFileManager defaultManager];
|
mgr = [[NSFileManager new] autorelease];
|
||||||
|
|
||||||
if (0.0 == undeleted)
|
if (0.0 == undeleted)
|
||||||
{
|
{
|
||||||
|
@ -2216,6 +2272,19 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
sweeping = NO;
|
sweeping = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) ecNewHour: (NSCalendarDate*)when
|
||||||
|
{
|
||||||
|
if (sweeping == YES)
|
||||||
|
{
|
||||||
|
NSLog(@"Argh - nested sweep attempt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sweeping = YES;
|
||||||
|
[NSThread detachNewThreadSelector: @selector(sweep:)
|
||||||
|
toTarget: self
|
||||||
|
withObject: when];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tell all our clients to quit, and wait for them to do so.
|
* Tell all our clients to quit, and wait for them to do so.
|
||||||
|
@ -2457,9 +2526,20 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
{
|
{
|
||||||
NSString *m;
|
NSString *m;
|
||||||
|
|
||||||
|
m = [self makeSpace];
|
||||||
ASSIGN(last, [NSDate date]);
|
ASSIGN(last, [NSDate date]);
|
||||||
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
if ([m length] == 0)
|
||||||
@"Disk space at %02.1f percent"), f * 100.0];
|
{
|
||||||
|
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
||||||
|
@"Disk space at %02.1f percent"), f * 100.0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
||||||
|
@"Disk space at %02.1f percent"
|
||||||
|
@" - deleted logs from %@ to make space"),
|
||||||
|
f * 100.0, m];
|
||||||
|
}
|
||||||
[self information: m from: nil to: nil type: LT_ALERT];
|
[self information: m from: nil to: nil type: LT_ALERT];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2473,9 +2553,20 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
{
|
{
|
||||||
NSString *m;
|
NSString *m;
|
||||||
|
|
||||||
|
m = [self makeSpace];
|
||||||
ASSIGN(last, [NSDate date]);
|
ASSIGN(last, [NSDate date]);
|
||||||
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
if ([m length] == 0)
|
||||||
@"Disk nodes at %02.1f percent"), f * 100.0];
|
{
|
||||||
|
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
||||||
|
@"Disk nodes at %02.1f percent"), f * 100.0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m = [NSString stringWithFormat: cmdLogFormat(LT_ALERT,
|
||||||
|
@"Disk nodes at %02.1f percent"
|
||||||
|
@" - deleted logs from %@ to make space"),
|
||||||
|
f * 100.0, m];
|
||||||
|
}
|
||||||
[self information: m from: nil to: nil type: LT_ALERT];
|
[self information: m from: nil to: nil type: LT_ALERT];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue