summaryrefslogtreecommitdiffstats
path: root/base/tps/src/include/httpClient/httpc/LogRotationTask.h
blob: eed098b6b1a4fc28786d42bc838b6feeb8e8904d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 */
/** BEGIN COPYRIGHT BLOCK
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301  USA 
 * 
 * Copyright (C) 2007 Red Hat, Inc.
 * All rights reserved.
 * END COPYRIGHT BLOCK **/

#ifndef __LOG_ROTATION_TASK_H__
#define __LOG_ROTATION_TASK_H__

#ifdef HAVE_CONFIG_H
#ifndef AUTOTOOLS_CONFIG_H
#define AUTOTOOLS_CONFIG_H

/* Eliminate warnings when using Autotools */
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION

#include <config.h>
#endif /* AUTOTOOLS_CONFIG_H */
#endif /* HAVE_CONFIG_H */

#include "httpClient/httpc/ScheduledTask.h"

/**
 * Log rotation task in Presence Server
 */

class EXPORT_DECL LogRotationTask: public ScheduledTask {
public:
    /**
     * Constructor - creates an initialized task for log rotation
     *
     * @param name Name of task
     * @param fileName Name of file to rotate
     * @param startTime Time when the file is to be rotated
     * @param maxLogs Max logs to keep
     * @param interval Time between rotations
     * @param fp File pointer for log file
     * @param lock Lock for writing to log file
     */
    LogRotationTask( const char *name,
                     const char *fileName,
                     time_t startTime,
                     int maxLogs,
                     int interval,
                     FILE **fp,
                     PRLock *lock );
    /**
     * Destructor
     */
    virtual ~LogRotationTask();
    /**
     * Returns a copy of the task
     *
     * @return A copy of the task
     */
    virtual ScheduledTask *Clone();
    /**
     * Executes the task
     *
     * @return 0 on successfully starting the task
     */
    virtual int Start();

protected:
    /**
     * Composes a file name from a base name and a time value
     *
     * @param filename The base file name (may be a path)
     * @param ltime The time value
     * @param outbuf Returns the composed file name
     * @return 0 on success
     */
    int CreateFilename( const char *filename,
                        time_t ltime,
                        char *outbuf );
    /**
     * Extracts the folder and base name components of a file path
     *
     * @param fileName The full file path to examine
     * @param dirName A buffer in which to place the folder found
     * @param baseName A buffer in which to place the base name found
     */
    static void GetPathComponents( const char *fileName,
                                   char *dirName,
                                   char *baseName );

    /**
     * Counts the number of files with the same initial path as fileName
     * (the same folder and the same base pattern)
     *
     * @param fileName The file name to compare (including a folder)
     * @return The number of matching files
     */
    static int CountFiles( const char *fileName );

    /**
     * Purges (deletes) files with the same initial path as fileName
     * (the same folder and the same base pattern)
     *
     * @param fileName The file name to compare (including a folder)
     * @param maxLogs The number of files to purge to
     * @return The number of files purged
     */
    static int PurgeLogs( const char *fileName, int maxLogs );

    char *m_fileName;
    int m_maxLogs;
    FILE **m_fp;
	PRLock *m_lock;
};

#endif // __LOG_ROTATION_TASK_H__