Advertisement
Guest User

Untitled

a guest
Mar 11th, 2014
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.25 KB | None | 0 0
  1. /**
  2.  * Удаление старых таблиц
  3.  */
  4.  
  5. import java.sql.*;
  6. import java.util.*;
  7. import java.util.regex.*;
  8.  
  9. import java.lang.Runtime;
  10. import java.lang.Process;
  11.  
  12. import bitel.billing.common.*;
  13. import bitel.billing.server.util.*;
  14.  
  15. public void main(setup, con, conSlave)
  16. {
  17.     private Calendar currentDate = new GregorianCalendar();
  18.     private HashMap checkTables = new HashMap();
  19.  
  20.     // kernel
  21.     checkTables.put("^bgs_query_log_(\\d{6})$", 3);         // месячная таблица запросов клиентов биллинга к серверу
  22.     checkTables.put("^data_log_error_(\\d{6})$", 1);        // ошибки обработки логов
  23.     checkTables.put("^log_function_process_(\\d{6})$", 1);  // логи обработки событий функциями скриптов
  24.     checkTables.put("^log_gscript_process_(\\d{6})$", 1);   // логи выполнения глобальных скриптов
  25.     checkTables.put("^source_data_(\\d{6})$", 3);           // данные о загруженных часовых логах
  26.     checkTables.put("^web_query_log_(\\d{6})$", 3);         // журнал web-запросов клиентов на странице статистики
  27.  
  28.     // dialup
  29.     private int dialupModuleId = 1;
  30.     checkTables.put("^log_error_" + dialupModuleId + "_(\\d{6})$", 1);          // ошибки авторизации
  31.     checkTables.put("^log_server_" + dialupModuleId + "_(\\d{6})$", 1);         // радиус запросы сессий
  32.     checkTables.put("^log_session_" + dialupModuleId + "_(\\d{6})$", 13);       // лог сессии
  33.     checkTables.put("^session_account_" + dialupModuleId + "_(\\d{6})$", 13);   // детализации наработки сессии по услугам
  34.     checkTables.put("^session_detail_" + dialupModuleId + "_(\\d{6})$", 13);    // детализация наработки сессии
  35.     // постоянно пустые таблицы
  36.     checkTables.put("^login_account_" + dialupModuleId + "_(\\d{6})$", 1);      // наработка по логину за месяц (используется системой ограничений)
  37.     checkTables.put("^log_session_net_" + dialupModuleId + "_(\\d{6})$", 1);    // сети, маршрутизируемые через выданные сессиям ip адреса
  38.     checkTables.put("^tariff_detail_" + dialupModuleId + "_(\\d{6})$", 1);      // детализация по тарифу (см. модуль бухгалтерии)
  39.  
  40.     // card
  41.     //private int cardModuleId = 2;
  42.     //checkTables.put("^card_dealer_pay_" + cardModuleId + "_(\\d{6})$", 13);     // платежи дилеров
  43.  
  44.     // npay
  45.     private int npayModuleId = 3;
  46.     checkTables.put("^npay_add_cost_detail_" + npayModuleId + "_(\\d{6})$", 1); // детализация сумм до которых "доводятся" доводящие абонплаты. используется макросом вычисления суммы позиции модуля bill
  47.     checkTables.put("^npay_detail_" + npayModuleId + "_(\\d{6})$", 13);         // детализация начислений модуля (может использоваться сторонними системами)
  48.  
  49.     // ipn
  50.     private int ipnModuleId = 4;
  51.     checkTables.put("^ipn_contract_data_" + ipnModuleId + "_(\\d{6})$", 1);     // аггрегированная наработка по адресам
  52.  
  53.     // mps
  54.     private int mpsModuleId = 5;
  55.     checkTables.put("^mps_payment_" + mpsModuleId + "_(\\d{6})$", 13);          // платежи за месяц
  56.  
  57.     String backupDir = "/home/backup/old_tables";
  58.  
  59.     Process mkdir = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "/bin/mkdir -p " + backupDir });
  60.     int mkdirDone = mkdir.waitFor();
  61.     if (mkdirDone != 0)
  62.     {
  63.         return;
  64.     }
  65.  
  66.     try
  67.     {
  68.         String query = "SHOW TABLES FROM bgbilling WHERE Tables_in_bgbilling REGEXP '_[0-9]{6}$'";
  69.         PreparedStatement ps = con.prepareStatement(query);
  70.         ResultSet rs = ps.executeQuery();
  71.         while (rs.next())
  72.         {
  73.             String tableName = rs.getString(1);
  74.             Boolean dropTable = false;
  75.             for (Map.Entry e : checkTables.entrySet())
  76.             {
  77.                 String tableNameRegexp = e.getKey();
  78.                 int tableTTL = e.getValue();
  79.                 Pattern p = Pattern.compile(tableNameRegexp);
  80.                 Matcher m = p.matcher(tableName);
  81.                 if (m.matches())
  82.                 {
  83.                     String tableDate = m.group(1);
  84.                     int yy = Utils.parseIntString(tableDate.substring(0, 4));
  85.                     int mm = Utils.parseIntString(tableDate.substring(4, 6));
  86.                     if (yy > 0 && mm > 0)
  87.                     {
  88.                         Calendar checkDate = new GregorianCalendar();
  89.                         //checkDate = currentDate.clone();
  90.                         checkDate.set(Calendar.MONTH, mm - 1);
  91.                         checkDate.set(Calendar.YEAR, yy);
  92.                         if (TimeUtils.monthsDelta(checkDate, currentDate) >= tableTTL)
  93.                         {
  94.                             dropTable = true;
  95.                         }
  96.                     }
  97.                 }
  98.             }
  99.             if (dropTable)
  100.             {
  101.                 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" };
  102.                 Process dumper = Runtime.getRuntime().exec(args);
  103.                 int dumperDone = dumper.waitFor();
  104.                 if (dumperDone == 0)
  105.                 {
  106.                     print(tableName);
  107.                     PreparedStatement psd = con.prepareStatement("DROP TABLE IF EXISTS " + tableName);
  108.                     psd.executeUpdate();
  109.                     psd.close();
  110.                 }
  111.                 else
  112.                 {
  113.                     print("dumper exit code = " + dumper.exitValue() + " on table: " + tableName);
  114.                 }
  115.             }
  116.         }
  117.         ps.close();
  118.     }
  119.     catch (Exception e)
  120.     {
  121.         e.printStackTrace();
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement