tq<ddlZddlZddlZddlZddlmZmZddlmZddl m Z ddl m Z ddl mZmZddlmZddlmZdd lmZmZdd lmZdd lmZd Zd \ZZZejdejZ eeegZ!edediZ"dZ#dZ$dZ%GddeZ&GddeZ'd(dZ(d)dZ)defdZ*dZ+dZ,d*dZ-d Z.d+d!Z/d"Z0d,d#Z1d-d$Z2d-d%Z3d&Z4d'Z5dS).N)deletefunc) Inspector)make_url) _ModuleMarker)RelationshipProperty sessionmaker) mysql_lib)FormattedException)BasehistoryLVE_STATS_2_TABLENAME_PREFIX)alembic_migratez/var/lve/lvestats2.db)mysql postgresqlsqlitez!<(?:user|password|host|database)>pymysqlpsycopg2shamanctj|}t|}d|D|z }t dt |DS)z^ Checks if views exist. :param sqlalchemy.engine.base.Engine engine: :return: c"h|] }t|z Sr).0ns /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/dbengine.py z4find_not_existing_tables_or_views../sDDD014DDDc3LK|]}|tdV dS)N)replacer)rxs r z4find_not_existing_tables_or_views..0s1ZZ7<<ZZZZZZr)r from_enginesetget_view_namestuple)enginenames inspectorexisting not_existings r!find_not_existing_tables_or_viewsr-'sj %f--I9++--..HDDeDDDxOL ZZeLFYFYZZZ Z ZZrcttjj}gd}t j|stdzfd|DS)zc Used to call engine.create_all() without views that are described as Table() :return: z;/opt/cloudlinux/flags/enabled-flags.d/burstable-limits.flagbursting_eventsc&g|] }|jv |Srname)rttables_for_disabled_featuress r z4get_list_of_tables_without_views..?s& L L L!/K!K!KA!K!K!Kr) dictr metadatatablesvaluespathlibPathexistsappendr)r8burstable_limits_feature_flagr4s @r get_list_of_tables_without_viewsr?3s $-& ' ' . . 0 0F#% $a! <5 6 6 = = ? ?^$++,HK\,\]]] L L L Lv L L LLrceZdZdS)MakeDbExceptionN__name__ __module__ __qualname__rrrrArABDrrAceZdZdS)DatabaseConfigErrorNrBrrrrHrHFrFrrHTcB|d}|tdddid|r6|tvr-td|dtdd|d }|tkr|tddd id|tkr!|d |d t }nY|.t |rtd dd idt|}|d |d|}t||}|S)z Extract and validate database connection uri from config :param dict cfg: :param bool check_support: :return str: db_typeNz#"%(config_variable)s" not in configconfig_variablemessagecontextz}Incorrect database type %(database_type)s. You should only use %(database_types)s. The correct db_type for mariadb is "mysql"z", ") database_typedatabase_typesconnect_stringz:///sqlite_db_pathzk"%(config_variable)s" contains placeholder values. Please set valid database credentials in the config file+z://) getrHSUPPORTED_DATABASESjoinSQLITEDEFAULT_DB_PATHPLACEHOLDER_CONNECT_STRING_REsearchget_db_client_library_name get_fixed_uri)cfg check_supportrJrQuriclient_librarys r cfg_get_uriraJsggi  G!=K\^gJh i i    (;;;!=-4 TgHhHhii     WW-..N&^3!=K\^nJo p p   &JJcgg&6HHJJ  %*G*N*N~*^*^ %% O 13CD 4G<<>>>>>n>>GS)) JrFctjd} t||}nN#t$rA}d}dt |i} ||| t || d|d}~wwxYw|d|d|d ur d |vr|d }|r&d } tj |d | } n"tj |||} | S)z Create sqlalchemy database engine :param dict cfg: :param bool just_print: :param bool debug: :param pool_class: :param bool check_support: :return: init_db_engine)r^z2Unable to configure database connection. %(error)serrorrLNzConnecting to database: %srJFdebugc$t|dSN)print)sql multiparamsparamss rdumpzmake_db_engine..dumps #JJJJJrmock)strategyexecutor)echo poolclass) logging getLoggerrarHstrrdrAinfo sqlalchemyr( create_engine) r] just_printre pool_classr^logrQemsgrNrlr(s rmake_db_enginer}}s%  , - -CK$S FFF KKKBCFF# #w#'BBCCJ K HH )3y>::: ~~'S..G c   "00&[_0``"00eWa0bb Ms( A3.sVVV!AfIVVVrz?Model %s declares column %s which does not exist in database %sTrz>Model %s declares table %s which does not exist in database %srrzWYou can run 'lve-create-db --create-missing-tables' command to recreate missing tables.zLYou can try to recreate malformed table, or ask CloudLinux support for help.)rrrs propagate addHandler NullHandlerrr$get_table_nameslist_decl_class_registryitems isinstancer __tablename__r= get_columnsrvinspectattrsrcolumnskeycritical)r( hide_loggingbaserzresultdatabase_inspection real_tables__classtable real_columnsmapper column_propcolumns rrrs  / 0 0C.  w*,,---"ER_a b bF#/77%5577K$399;;<<33 6 fm , ,  $|##E*** K  VV/B/N/Nu/U/UVVVL'//F%| : : k+?@@ :"-"5::!:\99LL a & & &  6:F>2: : LLY[achjp q q q$(F= ! # $ + +E 2 2 2 2 mp nooo ne cddd MrcHt|d}|d|dkS)NT)rrr)r)r(inspect_results rcheck_need_create_dbrs*&vDAAAN * +~l/K KKrctj|tt |ddS)N)r8T)stamp)r r7 create_allr?rr(s r create_dbrs=MV,L,N,NOOOF$''''''rcl|st|rt|dSt||dS)N) lve_stats_cfg)rrr)r(create_missing_tablesr]s rsetup_dbrsG3 4V < <3&c222222rcDtj|dSrg)r r7drop_allrs r drop_tablesrsM6"""""rc.|}|} ttjjD]\}}|t|}nWt|ttfrt||j j |v}nt||j j |k}| || dS#t$r|wxYwrg)connectbeginrr r7r8rrrr'r server_idexecutecommit Exceptionrollback)r(rconn_transr table_object delete_querys r clear_rowsrs NN  E KKMME #DM$8$>$>$@$@AA ( (OA| %l33 Ie}55 [%lLN4LPY4YZZ %lLN4LPY4YZZ MM, ' ' ' '    s CC44 DcBt|t|dSrg)rrrs r recreate_dbrs$ frc4|tjtj|ktjtjtj dktj tj dk}|#|tj|k}|#|tj|k}d|DS)Nrcg|] }|d Srr)rrecord_s rr5z(find_lost_keep_alive..s 5 5 57GAJ 5 5 5r) queryr createdfilterrgroup_byhavingrmaxidmin)sessionr from_timestmp to_timestamplost_keepalives rfind_lost_keep_alivers  go&& !Y. / / '/ " " $$q( ) ) $$q( ) ) '..w,/NOO '..w-/OPP 5 5n 5 5 55rct||||}|sdSdttjjD}||tjj<|D]*}tdi|}||_| |+| |r&| dt||dSdS)Nci|]}|dSrr)rcols r z'fix_lost_keep_alive..sQQQ3QQQQrz*Was fixed %s losted keep alive records: %sr) rrr __table__rkeysrrraddrrulen) rrrrlog_lost_keep_alivev2_keepalive_row timestamphistory_keepalives rfix_lost_keep_aliver s*7I}l[[O QQ$w/@/H/M/M/O/O*P*PQQQ.7W&*+$'' #77&677$-! %&&&& NN g >O@T@TVefffffggrct|}t||d||||dS)N)bindr)rrr)r rclose)r(r]rrrrs rfix_dbrsK'l'''))G[!1]iptuuuu MMOOOOOrcft|}|tdd|id|S)zZ Get database Python client library name :param str db_type: :return str: NzTThe client library to connect to the "%(database_type)s" database cannot be detectedrOrL)DB_CLIENT_LIBRARY_MAPrTrH)rJr`s rr[r[!sN +..w77N!t#W      rc||tkr|St|}ttj|S)zo Get fixed URI for the specified database :param str db_type: :param str uri: :return str: )MYSQLrrtr get_rfc1738_db_uri)rJr_us rr\r\4s8%  A y+A.. / //r)T)FFNT)FNrg)NN)NNN)6rrr:resqlalchemy.enginervrrsqlalchemy.engine.reflectionrsqlalchemy.engine.urlr&sqlalchemy.ext.declarative.clsregistryrsqlalchemy.ormrr clcommonr clcommon.clexceptionr lvestats.ormr r rlvestats.utils.dbmigratorrrXr POSTGRESQLrWcompile IGNORECASErYrUr __author__r-r?rArHrar}rrrrrrrrrrr[r\rrrrs ########222222******@@@@@@========333333&&&&&&&&555555555555);z6!+ +OQSQ^ _ _j&1 9    [ [ [ M M M     (        ,   0000f!!!!H,1t&&&&RLLL ((( 3333###$ 6666$gggg"& 0 0 0 0 0r