source: drsdaq/SlowData.cc@ 170

Last change on this file since 170 was 92, checked in by ogrimm, 15 years ago
Added some configuration parameters. Log file written outside of repository.
File size: 2.8 KB
Line 
1/********************************************************************\
2
3 SlowData.cc
4
5 Class handling the writing of slow data. Strings to be written in the
6 slow data file are checked that they do not contain control characters.
7
8 1. Call constructor with desired identification and directory
9 for slow data file. The public ErrorCode variable will be zero
10 if successful, otherwise contain the relevant errno.
11 2. Use NewEntry() to start a new entry with given variable name. A text
12 as second argument is optional.
13 3. If text should be added to an open entry, use AddToEntry(). It can
14 process printf()-style formatting.
15 4. The slow data file will be closed upon destruction of the instance.
16
17 Oliver Grimm
18
19\********************************************************************/
20
21#include "SlowData.h"
22
23//
24// Constructor: Open slow data file (filename generate using current date)
25//
26SlowData::SlowData(const char* IssuerName, const char* Direcory) {
27
28 time_t rawtime;
29 struct tm *timeinfo;
30 char Filename[MAX_PATH];
31
32 Issuer = IssuerName;
33 NewEntryCalled = false;
34 InternalCall = false;
35
36 time(&rawtime);
37 timeinfo = gmtime(&rawtime);
38 if(timeinfo->tm_hour>=13) rawtime += 12*60*60;
39 timeinfo = gmtime(&rawtime);
40 snprintf(Filename, sizeof(Filename), "%s/%s_%d%02d%02d.slow", Direcory, Issuer, timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday);
41
42 if ((SlowdataFile = fopen(Filename, "a")) == NULL) ErrorCode = errno;
43 else ErrorCode = 0;
44}
45
46//
47// Destructor
48//
49SlowData::~SlowData() {
50 if(SlowdataFile!=NULL) fclose(SlowdataFile);
51}
52
53//
54// Add a new entry to slow data file
55//
56bool SlowData::NewEntry(const char *Variable, const char *Text) {
57
58 time_t RawTime;
59 struct tm *TM;
60 struct timeval Time;
61
62 time(&RawTime);
63 TM = localtime(&RawTime);
64 gettimeofday(&Time, NULL);
65 InternalCall = true;
66 NewEntryCalled = AddToEntry("\n%s %s %d %d %d %d %d %d %d %lu ", Issuer, Variable, TM->tm_year+1900,TM->tm_mon+1,TM->tm_mday,TM->tm_hour,TM->tm_min,TM->tm_sec, Time.tv_usec/1000, Time.tv_sec);
67 InternalCall = false;
68 if(Text != NULL && NewEntryCalled == true) NewEntryCalled = AddToEntry("%s", Text);
69
70 return NewEntryCalled;
71}
72
73//
74// Add data to an open entry
75//
76bool SlowData::AddToEntry(const char *Format, ...) {
77
78 char Textbuffer[MAX_ENTRY_SIZE];
79 va_list ArgumentPointer;
80
81 if(SlowdataFile==NULL || (!NewEntryCalled && !InternalCall)) return false;
82
83 va_start(ArgumentPointer, Format);
84 vsnprintf(Textbuffer, sizeof(Textbuffer), Format, ArgumentPointer);
85 va_end(ArgumentPointer);
86
87 if(!InternalCall)
88 for(unsigned int i=0; i<strlen(Textbuffer); i++)
89 if (iscntrl(Textbuffer[i])) return false;
90
91 if(fprintf(SlowdataFile, "%s", Textbuffer) == -1) {
92 ErrorCode = errno;
93 fclose(SlowdataFile);
94 SlowdataFile = NULL;
95 return false;
96 }
97 fflush(SlowdataFile);
98 ErrorCode = 0;
99 return true;
100}
Note: See TracBrowser for help on using the repository browser.