/[projects]/smsdaemon/common.cpp
ViewVC logotype

Contents of /smsdaemon/common.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 150 - (show annotations) (download)
Sun Dec 7 21:42:15 2008 UTC (15 years, 5 months ago) by torben
File size: 3223 byte(s)
Make daemon mode a chance to dump error messages to console before daemonizing

1 #include "common.h"
2
3
4 #include "version.h"
5
6 #include <stdlib.h>
7 #include <string>
8 #include <iostream>
9 #include <iomanip>
10 #include <fstream>
11 #include <sstream>
12 #include <time.h>
13
14 #include "TaskManager.h"
15 #include "PluginManager.h"
16 #include "ConfigFile.h"
17
18 using namespace std;
19 const char* Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"};
20
21 Common* Common::instance()
22 {
23 static Common store;
24 return &store;
25 }
26
27
28 Common::Common()
29 : _pluginManager(0), _taskManager(0)
30 {
31 _pluginManager = new PluginManager();
32 _taskManager = new TaskManager();
33 configFilePath = "/etc/smsdaemon.conf";
34 _configFile = new ConfigFile();
35
36 daemonized = false;
37 }
38
39
40 Common::~Common()
41 {
42 if (_pluginManager)
43 delete _pluginManager;
44
45 if (_taskManager)
46 delete _taskManager;
47 }
48
49 PluginManager* Common::GetPluginManager()
50 {
51 return _pluginManager;
52 }
53
54 TaskManager* Common::GetTaskManager()
55 {
56 return _taskManager;
57 }
58
59 ConfigFile* Common::GetConfigfile()
60 {
61 return _configFile;
62 }
63
64 void Common::logMessage(string msg)
65 {
66 time_t t = time(0);
67 tm now;
68 localtime_r(&t, &now);
69
70 ostringstream out;
71 out << Months[ now.tm_mon ] << " " << setw(2) << setfill('0') << now.tm_mday;
72 out << " " << setw(2) << setfill('0') << now.tm_hour;
73 out << ":" << setw(2) << setfill('0') << now.tm_min;
74 out << ":" << setw(2) << setfill('0') << now.tm_sec;
75 out << " " << msg << endl;
76
77 if (this->isDaemon && _logFile != "" && daemonized)
78 {
79 seteuid(0);
80 ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode
81 if (of)
82 {
83 of << out.str();
84 of.flush();
85 of.close();
86 }
87 seteuid( this->uid);
88 }
89 else
90 {
91 cout << out.str();
92 cout.flush();
93 }
94 }
95
96 void Common::printUsage()
97 {
98 cout << VERSION << endl;
99 cout << SVNVERSION << endl << endl;
100 cout << "Usage --daemon|--debug [arguments]" << endl;
101 cout << "Commandline arguments :" << endl;
102 cout << " --daemon : Run in daemon (background) mode" << endl;
103 cout << " --debug : Run as normal (frontground) process," << endl;
104 cout << " with all messages written to std out" << endl;
105 cout << " --config <file>: Specify which config file to use " << endl;
106 cout << " default" << configFilePath << endl;
107 cout << " --help : Show this help screen" << endl;
108
109 exit(0);
110 }
111
112 void Common::loadConfig(int argc, char* argv[])
113 {
114 isDaemon = false;
115 isDebug = false;
116
117 for (int i = 1; i< argc; i++)
118 {
119 string current(argv[i]);
120 if (current == "--daemon")
121 {
122 isDaemon = true;
123 isDebug = false;
124
125 }
126 else if (current == "--debug")
127 {
128 isDaemon = false;
129 isDebug = true;
130 }
131 else if (current == "--config")
132 {
133 }
134 else if (current == "-h" || current == "--help")
135 {
136 printUsage();
137 }
138 else
139 {
140 cout << "Unknown argument : " << current << endl << endl;
141 }
142 }
143
144 if (! ( isDaemon || isDebug))
145 printUsage();
146 }
147
148
149 std::string Common::getStatusMessage()
150 {
151 long int now = time(0);
152
153 long int diff = now - this->daemonStart;
154
155
156 std::ostringstream out;
157 out << "Uptime " << diff << " seconds. ";
158 out << "Messages received:" << this->smsCounter.incomming << ". ";
159 out << "Messages sent:" << this->smsCounter.outgoing << ".";
160
161 return out.str();
162 }

  ViewVC Help
Powered by ViewVC 1.1.20