Fotobot
Get data from your photovoltaic plant
startup.cpp
Go to the documentation of this file.
1 
7 #include "static.h"
8 #include "startup.h"
9 #include "dualfilelogger.h"
10 #include "httplistener.h"
11 #include "requestmapper.h"
12 #include "staticfilecontroller.h"
13 #include "invertors.h"
14 #include "maintenance.h"
15 #include <QLibraryInfo>
16 #include <QTranslator>
17 #include <QTextCodec>
18 #include <QtGlobal>
19 
21 #define APPNAME "fotobot"
22 
24 #define ORGANISATION "Hobrasoft"
25 
27 #define DESCRIPTION "Applications gets data from fronius invertors"
28 
29 
31  // Initialize the core application
32  QCoreApplication* app = application();
33  app->setApplicationName(APPNAME);
34  app->setOrganizationName(ORGANISATION);
35  QString configFileName=Static::getConfigFileName();
36 
37  // Configure logging into files
38  QSettings* mainLogSettings=new QSettings(configFileName,QSettings::IniFormat,app);
39  mainLogSettings->beginGroup("mainLogFile");
40  QSettings* debugLogSettings=new QSettings(configFileName,QSettings::IniFormat,app);
41  debugLogSettings->beginGroup("debugLogFile");
42  Logger* logger=new DualFileLogger(mainLogSettings,debugLogSettings,10000,app);
43  Q_UNUSED(logger);
44 // logger->installMsgHandler();
45 
46  // Translations
47  QSettings localeSettings(configFileName, QSettings::IniFormat, app);
48  localeSettings.beginGroup("locale");
49  QString locale = localeSettings.value("locale", QLocale::system().name()).toString();
50  QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
51  QTranslator *translator = new QTranslator;
52  QString an = app->applicationName();
53  QString lp = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
54  QString tf = an + "_" + locale;
55  QString l1 = "/usr/share/locale/";
56  QString l2 = "/usr/local/share/locale/";
57  QString l3 = QString("/usr/share/") + an;
58  QString tx = locale + "/LC_MESSAGES/" + an;
59  for (;;) {
60  if (translator->load (tf, lp ) ) break;
61  if (translator->load (tf, ".") ) break;
62  if (translator->load (tf, an ) ) break;
63  if (translator->load (tx, l1 ) ) break;
64  if (translator->load (tx, l2 ) ) break;
65  if (translator->load (tf, l3 ) ) break;
66  qWarning() << "Translations not loaded";
67  break;
68  }
69  app->installTranslator(translator);
70 
71  // Configure database file
72  QSettings* databaseSettings = new QSettings(configFileName,QSettings::IniFormat,app);
73  databaseSettings->beginGroup("database");
74  Static::db = new DATABASE(databaseSettings, app);
75  new MAINTENANCE();
76 
77  // Configure invertors
78  Static::invertors = new INVERTORS(app);
79  Static::invertors->openLines();
80 
81  // Startup interacebos restarter
82  Static::interfacebox = new INTERFACEBOX(app);
83  Static::interfacebox->setDatabase(Static::db);
84  Static::interfacebox->start();
85 
86  // Startup sun position calculations
87  Static::slunce = new SLUNCE(app);
89  geo = Static::db->geocoordinates();
90  Static::slunce->setObserver(geo.latitude.toDouble(), geo.longitude.toDouble());
91  Static::slunce->start();
92 
93  // Configure template loader and cache
94  QSettings* templateSettings=new QSettings(configFileName,QSettings::IniFormat,app);
95  templateSettings->beginGroup("templates");
96  Static::templateLoader=new TemplateCache(templateSettings,app);
97 
98  // Configure session store
99  QSettings* sessionSettings=new QSettings(configFileName,QSettings::IniFormat,app);
100  sessionSettings->beginGroup("sessions");
101  Static::sessionStore=new HttpSessionStore(sessionSettings,app);
102 
103  // Configure static file controller
104  QSettings* fileSettings=new QSettings(configFileName,QSettings::IniFormat,app);
105  fileSettings->beginGroup("docroot");
106  Static::staticFileController=new StaticFileController(fileSettings,app);
107 
108  // Configure and start the TCP listener
109  QSettings* listenerSettings=new QSettings(configFileName,QSettings::IniFormat,app);
110  listenerSettings->beginGroup("listener");
111  new HttpListener (listenerSettings, new RequestMapper(app), app);
112 
113  qWarning("Service has started");
114 }
115 
116 
118  qWarning("Service has been stopped");
119  // QCoreApplication destroys all objects that have been created in start().
120 }
121 
122 
123 Startup::Startup(int argc, char *argv[])
124  : QtService<QCoreApplication>(argc, argv, APPNAME) {
125  setServiceDescription(DESCRIPTION);
126  //setStartupType(AutoStartup);
127 }
128 
129 
130 
Startup(int argc, char *argv[])
Definition: startup.cpp:123
Manages list of invertors and their threads.
Definition: invertors.h:36
Class describing database table GEOCOORDINATES.
Astronomické výpočty polohy slunce.
Definition: slunce.h:18
static StaticFileController * staticFileController
Definition: static.h:60
static HttpSessionStore * sessionStore
Definition: static.h:57
Virtual class for invertor communication.
Definition: interfacebox.h:29
static TemplateLoader * templateLoader
Definition: static.h:54
void setObserver(double lat, double lng)
Definition: slunce.cpp:40
void start(Priority priority=InheritPriority)
Starts the thread.
void openLines()
Opens all configured invertors.
Definition: invertors.cpp:93
void start()
Definition: startup.cpp:30
Class for communication with database.
Definition: database.h:47
static QString getConfigFileName()
Definition: static.cpp:29
#define ORGANISATION
Definition: startup.cpp:24
DBT_GEOCOORDINATES geocoordinates()
Returns geocoordinates.
Definition: database.cpp:581
Simple database maintenance made every 24 hours.
Definition: maintenance.h:16
void stop()
Definition: startup.cpp:117
#define DESCRIPTION
Definition: startup.cpp:27
#define APPNAME
Definition: startup.cpp:21