Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Удаление старых таблиц
- */
- import java.sql.*;
- import java.util.*;
- import java.util.regex.*;
- import java.lang.Runtime;
- import java.lang.Process;
- import bitel.billing.common.*;
- import bitel.billing.server.util.*;
- public void main(setup, con, conSlave)
- {
- private Calendar currentDate = new GregorianCalendar();
- private HashMap checkTables = new HashMap();
- // kernel
- checkTables.put("^bgs_query_log_(\\d{6})$", 3); // месячная таблица запросов клиентов биллинга к серверу
- checkTables.put("^data_log_error_(\\d{6})$", 1); // ошибки обработки логов
- checkTables.put("^log_function_process_(\\d{6})$", 1); // логи обработки событий функциями скриптов
- checkTables.put("^log_gscript_process_(\\d{6})$", 1); // логи выполнения глобальных скриптов
- checkTables.put("^source_data_(\\d{6})$", 3); // данные о загруженных часовых логах
- checkTables.put("^web_query_log_(\\d{6})$", 3); // журнал web-запросов клиентов на странице статистики
- // dialup
- private int dialupModuleId = 1;
- checkTables.put("^log_error_" + dialupModuleId + "_(\\d{6})$", 1); // ошибки авторизации
- checkTables.put("^log_server_" + dialupModuleId + "_(\\d{6})$", 1); // радиус запросы сессий
- checkTables.put("^log_session_" + dialupModuleId + "_(\\d{6})$", 13); // лог сессии
- checkTables.put("^session_account_" + dialupModuleId + "_(\\d{6})$", 13); // детализации наработки сессии по услугам
- checkTables.put("^session_detail_" + dialupModuleId + "_(\\d{6})$", 13); // детализация наработки сессии
- // постоянно пустые таблицы
- checkTables.put("^login_account_" + dialupModuleId + "_(\\d{6})$", 1); // наработка по логину за месяц (используется системой ограничений)
- checkTables.put("^log_session_net_" + dialupModuleId + "_(\\d{6})$", 1); // сети, маршрутизируемые через выданные сессиям ip адреса
- checkTables.put("^tariff_detail_" + dialupModuleId + "_(\\d{6})$", 1); // детализация по тарифу (см. модуль бухгалтерии)
- // card
- //private int cardModuleId = 2;
- //checkTables.put("^card_dealer_pay_" + cardModuleId + "_(\\d{6})$", 13); // платежи дилеров
- // npay
- private int npayModuleId = 3;
- checkTables.put("^npay_add_cost_detail_" + npayModuleId + "_(\\d{6})$", 1); // детализация сумм до которых "доводятся" доводящие абонплаты. используется макросом вычисления суммы позиции модуля bill
- checkTables.put("^npay_detail_" + npayModuleId + "_(\\d{6})$", 13); // детализация начислений модуля (может использоваться сторонними системами)
- // ipn
- private int ipnModuleId = 4;
- checkTables.put("^ipn_contract_data_" + ipnModuleId + "_(\\d{6})$", 1); // аггрегированная наработка по адресам
- // mps
- private int mpsModuleId = 5;
- checkTables.put("^mps_payment_" + mpsModuleId + "_(\\d{6})$", 13); // платежи за месяц
- String backupDir = "/home/backup/old_tables";
- Process mkdir = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "/bin/mkdir -p " + backupDir });
- int mkdirDone = mkdir.waitFor();
- if (mkdirDone != 0)
- {
- return;
- }
- try
- {
- String query = "SHOW TABLES FROM bgbilling WHERE Tables_in_bgbilling REGEXP '_[0-9]{6}$'";
- PreparedStatement ps = con.prepareStatement(query);
- ResultSet rs = ps.executeQuery();
- while (rs.next())
- {
- String tableName = rs.getString(1);
- Boolean dropTable = false;
- for (Map.Entry e : checkTables.entrySet())
- {
- String tableNameRegexp = e.getKey();
- int tableTTL = e.getValue();
- Pattern p = Pattern.compile(tableNameRegexp);
- Matcher m = p.matcher(tableName);
- if (m.matches())
- {
- String tableDate = m.group(1);
- int yy = Utils.parseIntString(tableDate.substring(0, 4));
- int mm = Utils.parseIntString(tableDate.substring(4, 6));
- if (yy > 0 && mm > 0)
- {
- Calendar checkDate = new GregorianCalendar();
- //checkDate = currentDate.clone();
- checkDate.set(Calendar.MONTH, mm - 1);
- checkDate.set(Calendar.YEAR, yy);
- if (TimeUtils.monthsDelta(checkDate, currentDate) >= tableTTL)
- {
- dropTable = true;
- }
- }
- }
- }
- if (dropTable)
- {
- String[] args = { "/bin/sh", "-c", "/usr/bin/mysqldump --user=bill --password=bgbilling --quick --single-transaction --default-character-set=cp1251 bgbilling " + tableName + " | /bin/gzip > " + backupDir +"/" + tableName + ".sql.gz" };
- Process dumper = Runtime.getRuntime().exec(args);
- int dumperDone = dumper.waitFor();
- if (dumperDone == 0)
- {
- print(tableName);
- PreparedStatement psd = con.prepareStatement("DROP TABLE IF EXISTS " + tableName);
- psd.executeUpdate();
- psd.close();
- }
- else
- {
- print("dumper exit code = " + dumper.exitValue() + " on table: " + tableName);
- }
- }
- }
- ps.close();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement