2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Author : Maxim Mamontov <faust@stargazer.dp.ua>
23 $Date: 2010/03/25 12:32:30 $
36 #include "base_store.h"
38 #include "conffiles.h"
40 #include "user_stat.h"
41 #include "user_conf.h"
42 #include "corp_conf.h"
43 #include "service_conf.h"
44 #include "admin_conf.h"
45 #include "tariff_conf.h"
46 #include "base_settings.h"
47 #include "stg_message.h"
51 volatile time_t stgTime = time(NULL);
53 int main(int argc, char **argv)
55 printfd(__FILE__, "Start\n");
57 BASE_STORE * fromStore = NULL;
58 BASE_STORE * toStore = NULL;
60 SETTINGS * settings = NULL;
64 MODULE_SETTINGS fromStoreSettings;
65 MODULE_SETTINGS toStoreSettings;
74 vector<STG_MSG_HDR> hdrs;
75 vector<STG_MSG_HDR>::iterator mit;
81 settings = new SETTINGS(argv[1]);
83 settings = new SETTINGS();
85 if (settings->ReadSettings())
87 printfd(__FILE__, "Error reading settings\n");
92 fromStoreSettings = settings->GetSourceStoreModuleSettings();
93 toStoreSettings = settings->GetDestStoreModuleSettings();
94 modulePath = settings->GetModulesPath();
96 string sourcePlugin(modulePath + "/mod_" + fromStoreSettings.moduleName + ".so");
97 string destPlugin(modulePath + "/mod_" + toStoreSettings.moduleName + ".so");
99 src_lh = dlopen(sourcePlugin.c_str(), RTLD_NOW);
102 printfd(__FILE__, "Source storage plugin loading failed: %s\n", dlerror());
107 dst_lh = dlopen(destPlugin.c_str(), RTLD_NOW);
110 printfd(__FILE__, "Destination storage plugin loading failed: %s\n", dlerror());
115 BASE_STORE * (*GetSourceStore)();
116 BASE_STORE * (*GetDestStore)();
117 GetSourceStore = (BASE_STORE * (*)())dlsym(src_lh, "GetStore");
120 printfd(__FILE__, "Source storage plugin loading failed. GetStore not found: %s\n", dlerror());
124 GetDestStore = (BASE_STORE * (*)())dlsym(dst_lh, "GetStore");
127 printfd(__FILE__, "Storage plugin (firebird) loading failed. GetStore not found: %s\n", dlerror());
132 fromStore = GetSourceStore();
133 toStore = GetDestStore();
135 vector<string> entities;
136 vector<string> ready;
137 vector<string>::const_iterator it;
138 fromStore->SetSettings(fromStoreSettings);
139 fromStore->ParseSettings();
140 toStore->SetSettings(toStoreSettings);
141 toStore->ParseSettings();
143 printfd(__FILE__, "Importing admins:\n");
144 entities.erase(entities.begin(), entities.end());
145 ready.erase(ready.begin(), ready.end());
146 if (fromStore->GetAdminsList(&entities))
148 printfd(__FILE__, "Error getting admins list: %s\n", fromStore->GetStrError().c_str());
154 if (toStore->GetAdminsList(&ready))
156 printfd(__FILE__, "Error getting admins list: %s\n", toStore->GetStrError().c_str());
162 for (it = entities.begin(); it != entities.end(); ++it)
164 printfd(__FILE__, "\t - %s\n", it->c_str());
165 if (find(ready.begin(), ready.end(), *it) == ready.end())
166 if (toStore->AddAdmin(*it))
168 printfd(__FILE__, "Error adding admin: %s\n", toStore->GetStrError().c_str());
174 if (fromStore->RestoreAdmin(&ac, *it))
176 printfd(__FILE__, "Error getting admin's confi: %s\n", fromStore->GetStrError().c_str());
183 if (toStore->SaveAdmin(ac))
185 printfd(__FILE__, "Error saving admin's conf: %s\n", toStore->GetStrError().c_str());
193 printfd(__FILE__, "Importing tariffs:\n");
194 entities.erase(entities.begin(), entities.end());
195 ready.erase(ready.begin(), ready.end());
196 if (fromStore->GetTariffsList(&entities))
198 printfd(__FILE__, "Error getting tariffs list: %s\n", fromStore->GetStrError().c_str());
204 if (toStore->GetTariffsList(&ready))
206 printfd(__FILE__, "Error getting tariffs list: %s\n", toStore->GetStrError().c_str());
212 for (it = entities.begin(); it != entities.end(); ++it)
214 printfd(__FILE__, "\t - %s\n", it->c_str());
215 if (find(ready.begin(), ready.end(), *it) == ready.end())
216 if (toStore->AddTariff(*it))
218 printfd(__FILE__, "Error adding tariff: %s\n", toStore->GetStrError().c_str());
224 if (fromStore->RestoreTariff(&td, *it))
226 printfd(__FILE__, "Error getting tariff's data: %s\n", fromStore->GetStrError().c_str());
232 if (toStore->SaveTariff(td, *it))
234 printfd(__FILE__, "Error saving tariff's data: %s\n", toStore->GetStrError().c_str());
242 printfd(__FILE__, "Importing services:\n");
243 entities.erase(entities.begin(), entities.end());
244 ready.erase(ready.begin(), ready.end());
245 if (fromStore->GetServicesList(&entities))
247 printfd(__FILE__, "Error getting service list: %s\n", fromStore->GetStrError().c_str());
253 if (toStore->GetServicesList(&ready))
255 printfd(__FILE__, "Error getting service list: %s\n", toStore->GetStrError().c_str());
261 for (it = entities.begin(); it != entities.end(); ++it)
263 printfd(__FILE__, "\t - %s\n", it->c_str());
264 if (find(ready.begin(), ready.end(), *it) == ready.end())
265 if (toStore->AddService(*it))
267 printfd(__FILE__, "Error adding service: %s\n", toStore->GetStrError().c_str());
273 if (fromStore->RestoreService(&sc, *it))
275 printfd(__FILE__, "Error getting service's data: %s\n", fromStore->GetStrError().c_str());
281 if (toStore->SaveService(sc))
283 printfd(__FILE__, "Error saving service's data: %s\n", toStore->GetStrError().c_str());
291 printfd(__FILE__, "Importing corporations:\n");
292 entities.erase(entities.begin(), entities.end());
293 ready.erase(ready.begin(), ready.end());
294 if (fromStore->GetCorpsList(&entities))
296 printfd(__FILE__, "Error getting corporations list: %s\n", fromStore->GetStrError().c_str());
302 if (toStore->GetCorpsList(&ready))
304 printfd(__FILE__, "Error getting corporations list: %s\n", toStore->GetStrError().c_str());
310 for (it = entities.begin(); it != entities.end(); ++it)
312 printfd(__FILE__, "\t - %s\n", it->c_str());
313 if (find(ready.begin(), ready.end(), *it) == ready.end())
314 if (toStore->AddCorp(*it))
316 printfd(__FILE__, "Error adding corporation: %s\n", toStore->GetStrError().c_str());
322 if (fromStore->RestoreCorp(&cc, *it))
324 printfd(__FILE__, "Error getting corporation's data: %s\n", fromStore->GetStrError().c_str());
330 if (toStore->SaveCorp(cc))
332 printfd(__FILE__, "Error saving corporation's data: %s\n", toStore->GetStrError().c_str());
340 printfd(__FILE__, "Importing users:\n");
341 entities.erase(entities.begin(), entities.end());
342 ready.erase(ready.begin(), ready.end());
343 if (fromStore->GetUsersList(&entities))
345 printfd(__FILE__, "Error getting users list: %s\n", fromStore->GetStrError().c_str());
351 if (toStore->GetUsersList(&ready))
353 printfd(__FILE__, "Error getting users list: %s\n", toStore->GetStrError().c_str());
359 sort(ready.begin(), ready.end());
360 for (it = entities.begin(); it != entities.end(); ++it)
362 printfd(__FILE__, "\t - %s\n", it->c_str());
363 if (!binary_search(ready.begin(), ready.end(), *it)) {
364 if (toStore->AddUser(*it))
366 printfd(__FILE__, "Error adding user: %s\n", toStore->GetStrError().c_str());
373 printfd(__FILE__, "\t\t(adding passed)\n");
375 if (fromStore->RestoreUserConf(&uc, *it))
377 printfd(__FILE__, "Error getting user's conf: %s\n", fromStore->GetStrError().c_str());
383 if (fromStore->RestoreUserStat(&us, *it))
385 printfd(__FILE__, "Error getting user's stat: %s\n", fromStore->GetStrError().c_str());
391 if (toStore->SaveUserConf(uc, *it))
393 printfd(__FILE__, "Error saving user's conf: %s\n", toStore->GetStrError().c_str());
399 if (toStore->SaveUserStat(us, *it))
401 printfd(__FILE__, "Error saving user's stat: %s\n", toStore->GetStrError().c_str());
407 hdrs.erase(hdrs.begin(), hdrs.end());
408 if (fromStore->GetMessageHdrs(&hdrs, *it))
410 printfd(__FILE__, "Error getting user's messages: %s\n", fromStore->GetStrError().c_str());
416 for (mit = hdrs.begin(); mit != hdrs.end(); ++mit)
418 if (fromStore->GetMessage(mit->id, &msg, *it))
420 printfd(__FILE__, "Error getting message for a user: %s\n", fromStore->GetStrError().c_str());
426 printfd(__FILE__, "\t\t * %s\n", msg.text.c_str());
427 if (toStore->AddMessage(&msg, *it))
429 printfd(__FILE__, "Error adding message to a user: %s\n", toStore->GetStrError().c_str());
441 printfd(__FILE__, "Done\n");