Advertisement
Guest User

SolrPython

a guest
Nov 27th, 2014
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.99 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import requests, os
  3. import shutil, errno
  4. import psycopg2
  5. import psycopg2.extras
  6. import xml.etree.ElementTree as ET
  7. from time import sleep
  8. from subprocess import Popen, PIPE
  9. from kazoo.client import KazooClient
  10.  
  11. class SolrUtil:
  12.  
  13.     def get_parameters(self, tenant_division_key):
  14.         conn_string = 'host=softcubepostgre02.cloudapp.net dbname=softcube user=admin password=P@$$w0rd88'
  15.         table_name = 'sc.tenant_division'
  16.         pg_client = psycopg2.connect(conn_string)
  17.         pg_cursor = pg_client.cursor(cursor_factory=psycopg2.extras.DictCursor)
  18.         pg_cursor.execute("select id from " + table_name + " where divisionkey = '"+tenant_division_key+"'")
  19.         rows = pg_cursor.fetchall()
  20.         all_rows = []
  21.         for row in rows:
  22.             all_rows.append(row)
  23.         tenant_division_id = all_rows[0]['id']
  24.         return tenant_division_id
  25.  
  26.     def has_such_collection(self, collection_name):
  27.         for i in range(1,4):
  28.             query = 'http://solr0'+str(i)+':8080/solr/admin/cores?action=STATUS&core='+collection_name
  29.             response = requests.get(query)
  30.             if "instanceDir" in response.text:
  31.                 return True
  32.         return False
  33.  
  34.     def copy(self, src, dst):
  35.         try:
  36.             shutil.copytree(src, dst)
  37.         except OSError as exc:  # python >2.5
  38.             if exc.errno == errno.ENOTDIR:
  39.                 shutil.copy(src, dst)
  40.             else:
  41.                 raise
  42.  
  43.     def create_new_collection(self, collection_name):
  44.         native_collection_name = 'collection_history'
  45.         path_to_new_collection = '/home/azureuser/recommend/'+collection_name
  46.         path_to_native_collection = '/home/azureuser/recommend/'+native_collection_name
  47.         path_to_new_collection_conf = path_to_new_collection+'/'+'conf'
  48.         path_to_native_collection_conf = path_to_native_collection+'/'+'conf'
  49.         self.copy(path_to_native_collection_conf, path_to_new_collection_conf)
  50.  
  51.     def change_data_config(self, collection_name, tenant_division_id):
  52.         new_query = 'select * from staging.product_export_framework_history where tenant_division_id = '+str(tenant_division_id)
  53.         path_to_data_config = '/home/azureuser/recommend/'+collection_name+'/'+'conf/'+'data-config.xml'
  54.         tree = ET.parse(path_to_data_config)
  55.         root = tree.getroot()
  56.         for country in root.iter('entity'):
  57.             country.set('query', new_query)
  58.         tree.write(path_to_data_config, encoding='utf-8', xml_declaration=True)
  59.  
  60.     def update_zookeeper(self, core_name):
  61.         directory = '/home/azureuser/recommend/'+core_name+'/conf'
  62.         process = Popen(['java', '-classpath', '.:/home/azureuser/solr-work/solr-war-lib/*', 'org.apache.solr.cloud.ZkCLI', '-cmd', 'upconfig', '-zkhost', 'solr01:2181,solr02:2181,solr03:2181', '-confdir', directory, '-confname', core_name], stdout=PIPE, stderr=PIPE)
  63.         stdout, stderr = process.communicate()
  64.         # sleep(5)
  65.  
  66.     def delete_zookeeper(self, core_name):
  67.         zk = KazooClient(hosts='solr01:2181,solr02:2181,solr03:2181')
  68.         zk.start()
  69.         zk.delete('/configs/27B8359_1', recursive=True)
  70.         zk.stop()
  71.  
  72.     def create_core_in_webinterface(self, core_name):
  73.         for i in range(1,4):
  74.             CREATE_URL = 'http://solr0'+str(i)+'.cloudapp.net:8080/solr/admin/cores?action=CREATE&name={0}&instanceDir=/var/lib/tomcat7/solr/{0}&config=solrconfig.xml&schema=schema.xml&dataDir=/var/lib/tomcat7/solr/{0}/data'
  75.             url = CREATE_URL.format(core_name)
  76.             response = requests.get(url)
  77.  
  78.     def reload_core(self, core_name):
  79.         RELOAD_URL = 'http://solr01.cloudapp.net:8080/solr/admin/cores?action=RELOAD&name={0}&instanceDir=/var/lib/tomcat7/solr/{0}&config=solrconfig.xml&schema=schema.xml&dataDir=/var/lib/tomcat7/solr/{0}/data'
  80.         url = RELOAD_URL.format(core_name)
  81.         response = requests.get(url)
  82.  
  83.     def unload_core(self, core_name):
  84.         for i in range(1,4):
  85.             UNLOAD_URL = 'http://solr0'+str(i)+'.cloudapp.net:8080/solr/admin/cores?action=UNLOAD&core={0}'
  86.             url = UNLOAD_URL.format(core_name)
  87.             response = requests.get(url)
  88.  
  89.     def delete_core_in_zookepeer(self, core_name):
  90.         for i in range(1,4):
  91.             DELETE_URL = 'http://solr0'+str(i)+'.cloudapp.net:8080/solr/admin/cores?action=DELETE&name={0}&instanceDir=/var/lib/tomcat7/solr/{0}&config=solrconfig.xml&schema=schema.xml&dataDir=/var/lib/tomcat7/solr/{0}/data'
  92.             url = DELETE_URL.format(core_name)
  93.             response = requests.get(url)
  94.  
  95.     def data_import(self, core_name):
  96.         query_string = 'http://solr01.cloudapp.net:8080/solr/'+core_name+'/dataimport?command=full-import'
  97.         r = requests.get(query_string)
  98.  
  99.     def delete_directory(self, collection_name):
  100.         path_to_directory = '/home/azureuser/recommend/'+collection_name
  101.         shutil.rmtree(path_to_directory)
  102.  
  103.     def create_core(self, tenant_division_key, type_recommendation):
  104.         collection_name = tenant_division_key+'_'+type_recommendation
  105.         tenant_division_id = self.get_parameters(tenant_division_key)
  106.         if self.has_such_collection(collection_name):
  107.             raise Exception("Collection_history already exists!")
  108.         else:
  109.             self.create_new_collection(collection_name)
  110.             self.change_data_config(collection_name,tenant_division_id)
  111.             self.update_zookeeper(collection_name)
  112.             self.delete_directory(collection_name)
  113.             self.create_core_in_webinterface(collection_name)
  114.  
  115.     def delete_core(self, tenant_division_key, type_recommendation):
  116.         collection_name = tenant_division_key+'_'+type_recommendation
  117.         self.delete_zookeeper(collection_name)
  118.         self.unload_core(collection_name)
  119.  
  120.     def data_import(self, collection_name):
  121.         query = 'http://solr01.cloudapp.net:8080/solr/'+collection_name+'/dataimport?command=full-import'
  122.         r = requests.get(query)
  123.  
  124. if __name__ == '__main__':
  125.  
  126.     solr_core = SolrUtil();
  127.  
  128.     core = 'D6931C0'
  129.     name = 'history'
  130.     collection_name = core+'_'+name
  131.  
  132.     # hersecret
  133.     solr_core.delete_core(core, name)
  134.     solr_core.create_core(core, name)
  135.     # solr_core.data_import(collection_name)
  136.  
  137.     #
  138.     #
  139.     #
  140.     #
  141.     #
  142.     #
  143.     #
  144.     # core = '14B95FB'
  145.     # name = 'history'
  146.     # collection_name = core+'_'+name
  147.     # # zoozoo
  148.     # solr_core.delete_core(core, name)
  149.     # solr_core.create_core(core, name)
  150.     # solr_core.data_import(collection_name)
  151.     #
  152.     #
  153.     #
  154.     #
  155.     #
  156.     # # solr_core.data_import(collection_name)
  157.     # #
  158.     # core = '2CBDD13'
  159.     # name = 'history'
  160.     # collection_name = core+'_'+name
  161.     # # lila
  162.     # solr_core.delete_core(core, name)
  163.     # solr_core.create_core(core, name)
  164.     # solr_core.data_import(collection_name)
  165.     # #
  166.     #
  167.     #
  168.     #
  169.     #
  170.     # core = 'F1105C6'
  171.     # name = 'history'
  172.     # collection_name = core+'_'+name
  173.     # # avelita
  174.     # solr_core.delete_core(core, name)
  175.     # solr_core.create_core(core, name)
  176.     # solr_core.data_import(collection_name)
  177.     # # #
  178.     # #
  179.     # #
  180.     # #
  181.     # #
  182.     # #
  183.     # #
  184.     # core = 'D9216D9'
  185.     # name = 'history'
  186.     # collection_name = core+'_'+name
  187.     # # fisherway
  188.     # solr_core.delete_core(core, name)
  189.     # solr_core.create_core(core, name)
  190.     # solr_core.data_import(collection_name)
  191.     #
  192.     #
  193.     #
  194.     #
  195.     #
  196.     #
  197.     #
  198.     # # solr_core.data_import(collection_name)
  199.     #
  200.     #
  201.     # # '14B95FB' - zoozoo
  202.     # # '2CBDD13' - lila
  203.     # # 'F1105C6' - avelita
  204.     # # 'D9216D9' - fisherway
  205.     #
  206.     # # core = '644E031'
  207.     # # name = 'history'
  208.     # # collection_name = core+'_'+name
  209.     # # # fotomag
  210.     # # solr_core.delete_core(core, name)
  211.     # # solr_core.create_core(core, name)
  212.     #
  213.     # # solr_core.create_core('27B8359', '1')
  214.     # # solr_core.create_core_in_webinterface('FF00BA0_history')
  215.     # # solr_core.data_import('FF00BA0_history')
  216.     #
  217.     # # solr_core.delete_core('27B8359', '1')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement