1//
2// PurgeStrategy.h
3//
4// Library: Foundation
5// Package: Logging
6// Module: FileChannel
7//
8// Definition of the PurgeStrategy class.
9//
10// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
11// and Contributors.
12//
13// SPDX-License-Identifier: BSL-1.0
14//
15
16
17#ifndef Foundation_PurgeStrategy_INCLUDED
18#define Foundation_PurgeStrategy_INCLUDED
19
20
21#include "Poco/Foundation.h"
22#include "Poco/File.h"
23#include "Poco/Timespan.h"
24#include <vector>
25
26
27namespace Poco {
28
29
30class Foundation_API PurgeStrategy
31 /// The PurgeStrategy is used by FileChannel
32 /// to purge archived log files.
33{
34public:
35 PurgeStrategy();
36 virtual ~PurgeStrategy();
37
38 virtual void purge(const std::string& path) = 0;
39 /// Purges archived log files. The path to the
40 /// current "hot" log file is given.
41 /// To find archived log files, look for files
42 /// with a name consisting of the given path
43 /// plus any suffix (e.g., .1, .20050929081500, .1.gz).
44 /// A list of archived files can be obtained by calling
45 /// the list() method.
46
47protected:
48 void list(const std::string& path, std::vector<File>& files);
49 /// Fills the given vector with a list of archived log
50 /// files. The path of the current "hot" log file is
51 /// given in path.
52 ///
53 /// All files with the same name as the one given in path,
54 /// plus some suffix (e.g., .1, .20050929081500, .1.gz) are
55 /// considered archived files.
56
57private:
58 PurgeStrategy(const PurgeStrategy&);
59 PurgeStrategy& operator = (const PurgeStrategy&);
60};
61
62
63class Foundation_API PurgeByAgeStrategy: public PurgeStrategy
64 /// This purge strategy purges all files that have
65 /// exceeded a given age (given in seconds).
66{
67public:
68 PurgeByAgeStrategy(const Timespan& age);
69 ~PurgeByAgeStrategy();
70
71 void purge(const std::string& path);
72
73private:
74 Timespan _age;
75};
76
77
78class Foundation_API PurgeByCountStrategy: public PurgeStrategy
79 /// This purge strategy ensures that a maximum number
80 /// of archived files is not exceeded. Files are deleted
81 /// based on their age, with oldest files deleted first.
82{
83public:
84 PurgeByCountStrategy(int count);
85 ~PurgeByCountStrategy();
86
87 void purge(const std::string& path);
88
89private:
90 int _count;
91};
92
93
94class Foundation_API PurgeOneFileStrategy: public PurgeStrategy
95 /// This purge strategy unconditionally purges one oldest file.
96 /// If there are no archived files, it will truncate current "hot" log file.
97 /// Intended usage: when there are no space left on device with logs.
98{
99public:
100 void purge(const std::string& path);
101};
102
103
104} // namespace Poco
105
106
107#endif // Foundation_PurgeStrategy_INCLUDED
108