
    hmy                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZ d dlmZ d dlT d dlmZ  G d	 d
ej                  ZdS )    N)defaultdict)Path)randomchoices)OptionalListLiteral)	safe_join)*)cmf_global_settingsc            
           e Zd ZdZej        j        g dz   Zd Zd Zd Z	 fdZ
ededefd	            Zed
efd            Z ed          Z ed          Z ed          Z ed          Z ed          Zedefd            Zedefd            Zed7dededefd            Zed             Zed             Zed8dededee         fd            Z e!"                    d          Z#ede$e         fd            Z%ed9defd!            Z&e!"                    d"          Z'ed#             Z(ed$             Z)ed%             Z*ed&             Z+d' Z,ed(             Z-ed)             Z.ed:d*            Z/e e0d+,          d-efd.                        Z1ed/             Z2ed0             Z3edd1dd1d2ded3ed4ed5efd6            Z4 xZ5S );CmfGlobalSettingsuF   
    Глобальные настройки приложения
    )performance_server_test
public_getpublic_listchange_page_settingsreset_page_settingseva_available_versioneva_current_versioneva_upgradeeva_shedule_upgradeeva_current_sheduled_upgradeeva_cancel_upgradeeva_upgrade_historyeva_upgrade_entryeva_backup_historyeva_backup_entryeva_restorec                     | j         j        s&| j        j        s| j        j        s| j        j        sd S t          t          j        j        dg           d S )NT)args)	auth_options_allow_base
is_changedauth_options_allow_oauthauth_options_allow_ldapauth_options_allow_ssoschedule_deferred_jobmodels	CmfPersonaccount_sync_usersselfs    0./modules/settings/models/cmf_global_settings.py_check_auth_settingsz&CmfGlobalSettings._check_auth_settings)   sd    ,7 	-8	,7	 +6	 Ff.AOOOOOO    c                 8   | j         j        sd S d}| j         s|                    dd          }t          |d           t	          t
          j        j                   t          j	        r1dt          j	        _
        t          j	                                         d S d S )Nu   Включение двухфакторной авторизации у всех пользователей может занять от 1 до 15 минутu   Включениеu   ВыключениеFabortT)two_factor_optr"   replace	cmf_alertr&   r'   r(   init_2fa_settingsgsessioncheckedsave)r+   messages     r,   _check_2fa_settingsz%CmfGlobalSettings._check_2fa_settings2   s    "- 	F r" 	Too&:<RSSG'''''f.@AAA9 	 $AIINN	 	r.   c                     d S N r*   s    r,   _check_password_settingsz*CmfGlobalSettings._check_password_settings>   s    r.   c                 6   |                                   |                                  |                                  | j        j        r| j        rt          d           | j        j        r| j        rt          d            t                      j        |i |S )Nu   Контроль работы включен. Система будет предупреждать о нарушениях сроков.u   Контроль работы включен. Система будет предупреждать и блокировать работу через 1 час в случае нарушения сроков.)	r?   r-   r;   staff_control_enabledr"   r4   staff_control_block_workspacesuperr9   )r+   r    kwargs	__class__s      r,   r9   zCmfGlobalSettings.saveA   s    %%'''!!###  """%0 	uT5O 	u t u u u-8 	{T=_ 	{ z { { {uww|T,V,,,r.   namecontentc                    t           j        j        st          d           d S t	          t
          j        d          }t          j        	                    |          st          
                    |           t	          ||           }t          |d          5 }|                    t          j        |                    d          d                              d d d            d S # 1 swxY w Y   d S )NR   Только администратор может менять настройкиcustom/static/app/assets/imageszwb+,   )r6   current_personis_adminr4   r
   configPROJECT_DIRospathexistsmakedirsopenwritebase64	b64decodesplit)rF   rG   r    rD   	file_pathfs         r,   r   z&CmfGlobalSettings.change_page_settingsM   s   ( 	jkkkFf02STT	w~~i(( 	#KK	"""i..	)U## 	=qGGF$W]]3%7%7%:;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   AC$$C(+C(namesc                     t           j        j        st          d           d S | D ]V}t	          t
          j        d|          }t          j        	                    |          rt          
                    |           Wd S )NrI   rJ   )r6   rM   rN   r4   r
   rO   rP   rQ   rR   rS   remove)r\   rF   rZ   s      r,   r   z%CmfGlobalSettings.reset_page_settingsY   s|    ( 	jkkkF 	% 	%D!&"46WY]^^Iw~~i(( %		)$$$	% 	%r.   z/var/log/eva_updatez/opt/bin/update.shz/opt/var/backup/z$/mnt/shared/config/available_versionz'/mnt/shared/config/shedule_upgrade.jsonreturnc                    t           j                                         | j                                        sdS | j                                        5 }|                                                    d          }ddd           n# 1 swxY w Y   t          	                    d|          s,t                              d|           t          dd           ||                                 k    rdS |S )u   
        Получение доступной для обновления последней официальной версии
        '' - обновление не требуется, None - обновление не доступно
        N
^(\d{2}\.\d{2}\.\d{2}\.\d{4})?$z)eva_available_version: invalid version %su6   Недопустимый ответ с сервера.Tr0   )r'   CmfAccessListcheck_admin_mode_EVA_VERSION_FILErS   rU   readstriprematchloggingerrorr4   r   )cls_kwargsr[   versions       r,   r   z'CmfGlobalSettings.eva_available_versionl   s    	--///$++-- 	F"'')) 	+QffhhnnT**G	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+xx:GDD 	\MMFPPPNVZ[[[[c--////Fs   (BBBc                     t                      S )u.   Получение текущей версии)cmf_get_versionrl   rm   s     r,   r   z%CmfGlobalSettings.eva_current_version~   s        r.   Nreleasern   branchwanted_timestampc                     t           j                                         |st          dd           t                              d|          st          dd           ||                                 k    rt          dd           ||                                 k    r"t          j	        j
        st          dd           |dk    rt          d	d           t          t          j                                                                                  }|r	||k    r|}n|}|||d
}| j                            d          5 }t#          j        ||           d d d            n# 1 swxY w Y   t          d           d S )Nu=   Не указана версия для обновления.Tr0   rb   uc   Версия для обновления указана в неправильном формате.uT   Версия меньше текущей, обновление недоступно.ug   На тестовые версии может обновлять только техподдержка.rr   u   Смена на тестовые ветки доступно через ручное обновление техподдржкой.)rn   rs   shedule_timestampwu0   Обновление запланировано.)r'   rc   rd   r4   rh   ri   r   r   r6   current_user
is_supportintdatetimenow	timestamp_EVA_SHEDULE_UPGRADE_FILErU   jsondump)rl   rn   rs   rt   now_tsrv   sheduler[   s           r,   r   z%CmfGlobalSettings.eva_shedule_upgrade   s   --/// 	dV^bccccxx:GDD 	J|  EI  J  J  J  Jc--////muyzzzzc//1111!.:S1  A  IM  N  N  N  NY  ]  ei  j  j  j  jX&**,,668899 	' 06 9 9 0 &%N_``*//44 	"Igq!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"EFFFFFs   E$$E(+E(c                     i }| j                                         rE| j                                         5 }t          j        |          }d d d            n# 1 swxY w Y   |S r=   )r~   rS   rU   r   load)rl   r   r[   s      r,   r   z.CmfGlobalSettings.eva_current_sheduled_upgrade   s    (//11 	'.3355 ')A,,' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AAAc                     t           j                                         | j                                        r| j                                         t          d           d S )Nu&   Обновление отменено.)r'   rc   rd   r~   rS   unlinkr4   rl   s    r,   r   z$CmfGlobalSettings.eva_cancel_upgrade   sX    --///(//11 	3)00222;<<<<<r.   restore_on_failc           	         t           j                                         t          dd           t	          | j                  dg}|r|                    d|            |r|                    d           	 t          j        |dddd          }nx# t          j	        t          j
        f$ rZ}t                              d	|j        |j        |j                   t          d
| d|j         d|j         d           Y d}~nd}~ww xY w|j                                        }|r8t          d|            |                    d          }|d         |d         dS t          d           dS )u  
        Запуск обновления. На  последнюю официальную, если version is None
        restore_on_fail - автоматический откат при ошибке.
        Возвращаем {'version': ..., 'entry_id': ...} - если обновление запущено.
        None - если обновление не требуется.
        /   Метод обновления устарел.Tr0   z--backgroundz
--version=z--restore-on-fail
   )timeoutcapture_outputchecktextzeva_upgrade: %s error: %s, %suB   Ошибка запуска процесса обновления(z): , Nu4   Запущен процесс обновления:  r      )rn   entry_idu-   Обновление не требуется.)r'   rc   rd   r4   str_EVA_UPDATE_SCRIPTappend
subprocessrunTimeoutExpiredCalledProcessErrorrj   	exceptioncmdstdoutstderrrg   	partition)	rl   rn   r   rm   r    proceoutputpartss	            r,   r   zCmfGlobalSettings.eva_upgrade   s    	--///DDQQQQC*++^< 	0KK.W../// 	-KK+,,,	E>$4tZ^___DD):+HI 	E 	E 	E>qxQRQYZZZw[\wwabaiwwmnmuww  @D  E  E  E  E  E  E  E  E  E	E ""$$ 	HUVUUVVV$$S))E$QxU1X>>>FGGGGGs   8B D-ADDz%^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$c                 x   t           j                                         t          dd           g }| j                                        rW| j                                        D ]=}| j                            |j	                  r|
                    d|j	        i           >|                    dd            |S )uE   Возвращаем список истории обновленийr   Tr0   r   c                     | d         S Nr   r>   xs    r,   <lambda>z7CmfGlobalSettings.eva_upgrade_history.<locals>.<lambda>   
    * r.   reversekey)r'   rc   rd   r4   _EVA_UPDATE_DIRis_diriterdir_UPDATE_ENTRY_REri   rF   r   sort)rl   rm   resultentrys       r,   r   z%CmfGlobalSettings.eva_upgrade_history   s     	--///DDQQQQ%%'' 	<,4466 < <'--ej99 <MM:uz":;;;D&=&=>>>r.   Fc                    t           j                                         t          dd           | j                            |          st          dd           | j        |z  }|                                st          d| dd           ||dd}g d	}|r|                    d
           |D ]J}d||<   ||z                                  r,||z  	                                
                                ||<   K|S )u;  
        Получим информацию об обновлении, with_log - получить лог-файл
        Возвращаем {
            entry_id: ..., datetime: ..., cmd: ..., version_src: ..., version_dst: ..., version_patches: ...,
            status: ..., ret_code: ..., log: ...}
        r   Tr0   u=   Недопустимый формат ID обновленияz
Backup ID u&    не найден на сервереN)r   r{   log)r   version_srcversion_dstversion_patchesstatusret_coder   )r'   rc   rd   r4   r   ri   r   rS   r   	read_textrg   )rl   r   with_logrm   
entry_pathr   filesfiles           r,   r   z#CmfGlobalSettings.eva_upgrade_entry   s0    	--///DDQQQQ#))%00 	dV^bcccc(.
  "" 	^P5PPPX\]]]]#tDD^^^ 	 LL 	E 	EDF4L4'')) E *4::<<BBDDtr.   zI^(?P<datetime>\d{4}-\d{2}-\d{2}_\d{6})__(?P<timestamp>\d+)__(?P<name>.*)$c                 X   t           j                                         t          dd           g }i }t	          t
                    }| j                                        r0| j                                        D ]}| j	        
                    |j                  x}rH|j        |d         g |d         |d         d||j        <   |                    ||j                            k|                                rXt                              |          x}r<| j	        
                    |          x}r ||                             |j                   |                                D ]*\  }}	||v r!||         d                             |	           +|                    dd	 
           |S )Nr   Tr0   rF   r{   r}   )r   rF   aliasesr{   r}   r   c                     | d         S r   r>   r   s    r,   r   z6CmfGlobalSettings.eva_backup_history.<locals>.<lambda>  r   r.   r   )r'   rc   rd   r4   r   list_EVA_BACKUP_DIRr   r   _BACKUP_ENTRY_REri   rF   r   
is_symlinkrQ   readlinkitemsextendr   )
rl   rm   r   idxr   r   ri   targetr   
alias_lists
             r,   r   z$CmfGlobalSettings.eva_backup_history   s   --///DDQQQQd##%%'' 	@,4466 	7 	7066uzBBB5 7$)JfRT$)*$5E+DV'X 'XC
O MM#ej/2222%%'' 7r{{57I7I-IV 7!$!5!;!;F!C!CC7FO**5:666(/ @ @$*s??M),33J???D&=&=>>>r.   c                     t           j                                         t          dd           t          dd           d S )Nr   Tr0   zTODO get backup detailr'   rc   rd   r4   rq   s     r,   r   z"CmfGlobalSettings.eva_backup_entry  sE    --///DDQQQQ*$777777r.   c                     t           j                                         t          dd           t          dd           d S )Nr   Tr0   zTODO Background Restorer   )rl   r   rm   s      r,   r   zCmfGlobalSettings.eva_restore  sE    --///DDQQQQ+4888888r.   c                 T    t           j        j        rt           j        j        j        S dS )uk   
        Хак, т.к. в публичном контексте возвращается acl_deny
        N)r6   global_settingspage_customizer   r   s    r,   public_get_page_customizez+CmfGlobalSettings.public_get_page_customize  s&    
 + 	9$388tr.   c                     t           j                            dg          }g d}|D ].}||         j        ||         _        |                                 /t          d           dS )uv   
        Установить в соответствии с ФСТЭК, включаем все защиты
        r   fields)two_factor_adminsession_timeoutpassword_min_upper_symbolpassword_min_numberspassword_min_special_symbolpassword_min_lengthpassword_max_dayspassword_check_historyauth_admin_mode_reloginauth_inactive_block_daysauth_fail_timeoutauth_fail_try_countauth_fail_permanent_blockaudit_storage_durationlogin_reuse_lockuL   Опции установлены в соответствии с ФСТЭК.N)r'   r   getfstek_defaultvaluer9   r4   )r+   gsfstek_default_fieldsfields       r,   fstek_set_defaultz#CmfGlobalSettings.fstek_set_default%  sx     %))#)77 
  
  
" * 	 	E i5BuIOGGIIIIabbbbbr.   c                 D   dd l }t          d         }d }d|fd}dd l}dd l}t          j        j        s"t          j        j        st          dd           d	d
 dfdd dfdd dfdd dfdd dfdd dfdd dfdd dfdd dfdd dfdd dfg}t          
                    d           |d         \  }}	}
t          j                    }d}|dk     r|d z  }|dk     t          j                    |z
  } |d!| d"|||	|
#          }t          
                    d$           |d          \  }}	}
d%}t          j        j        }d&}d'                    t!          t"          j        d()                    }t          j                    }t'          |          D ]+}|                    |                    |          |           ,t'          |          D ]*}|                    |                    |                     +t'          |          D ]*}|                    |                    |                     +t          j                    |z
  } |d*| d+|||	|
#          }t          
                    d,           |d-         \  }}	}
d%}d.}d/}d0}d1| d2}d3| d4}|d5z  }|d6                    d7 t'          d8          D                       z  }|d6z  }|d6                    d9 t'          d8          D                       z  }|d:z  }d;| d<}|d=z  }|d6                    d> t'          d8          D                       z  }|d6z  }|d6                    d? t'          d8          D                       z  }|d:z  }d@| dA}t0          j        j        j        j                                        5 }|                    |           |                    |           t          j                    }	 t'          |          D ]U}|                    |           |                    |                    |B                     |                    |           Vt'          |          D ]U}|                    |           |                    |                    |B                     |                    |           Vn# t>          $ r}  d } ~ ww xY wt          j                    |z
  }!|                    |           d d d            n# 1 swxY w Y    |dC| d+|!||	|
#          }"t          
                    dD           |d         \  }}	}
tA          |!                                d         dEz  dEz  dEz            }# |dF| dG|#||	|
#          }$t          
                    dH           |dI         \  }}	}
|"                                j#        d%z  }% |dJ| dK|%||	|
#          }&t          
                    dL           |dM         \  }}	}
dN}'tH          j%        &                    |'          s |dO| dK          }(nctO          |'dP          5 })tA          |)(                                          d%z  d%z  }*d d d            n# 1 swxY w Y    |dQ| dK|*||	|
#          }(t          
                    dR           |dS         \  }}	}
|)                                }+ |dT| dU|+||	|
#          },t          
                    dV           |dW         \  }}	}
d%}-dXd%z  }.|*                                5 }/t          j                    }0	 t'          |-          D ]}tH          '                    tH          j%                            |/tW          |                    tH          j,        tH          j-        z  tH          j.        z            })tH          /                    |)|.           tH          0                    |)           n# t>          $ r}  d } ~ ww xY wt          j                    |0z
  }1d d d            n# 1 swxY w Y    |dY|- dZ| d"|1||	|
#          }2t          
                    d[           |d         \  }}	}
tc          j2        g d\dd]dd^          }3|3j3        4                                }4tj          6                    d_|4          }3|3r	|3d         }3nd }3d }5|3r.d'                    d` |3D                       }6to          |6          }5|5r |da| db|5||	|
#          }7n |dc          }7t          
                    dd           |de         \  }}	}
	 tc          j2        dfdgdhtp          j9        di         dj         dktp          j9        di         dl         dmdndog	dd]dd^          }8|8j3        4                                }9|9:                                ^}:};}<}= |dp| dq|: dr|; ds|< dt	|<||	|
#          }>n?# t>          $ r2}? |du          }>t          
                    dv|?            Y d }?~?nd }?~?ww xY w|dw         \  }}	}
d%}@t0          j        j        j        j                                        5 }g }At'          |@          D ]S}t          j                    }B|                    dx           |A;                    t          j                    |Bz
             T	 d d d            n# 1 swxY w Y   ty          |A          d%z  }CtG          |A          d%z  }Dt{          |A          t}          |A          z  d%z  }Et          |A          tA          |@dyz  dzz                     d%z  }F |d{| dq|Cd|dr|Dd|ds|Ed|d}|Fd|dt|E||	|
#          }Gt          
                    d~           d'                    |||"|$|&|(|,|2|7|>|Gg          S )Nr   )greaterlessc                     d|  dS )N<p><span><b>z%</b>: </span><span>Skipped</span></p>r>   )captions    r,   _test_skippedz@CmfGlobalSettings.performance_server_test.<locals>._test_skippedI  s    P'PPPPr.   condc                 ^    |dk    r||k    }n||k    }|rdnd}d|  d| d ||           dS )Nr   greenredr   z </b>: </span><span style="color:z">z</span></p>r>   )r   
actual_val
cutoff_valfmt_funcr   successcolors          r,   _test_formatz?CmfGlobalSettings.performance_server_test.<locals>._test_formatL  s_    y  $
2$
2&1GGEEu'uu5uuT\T\]gThThuuuur.   ud   Тестирование сервера доступно только АдминистраторамTr0   g       @c                     | ddS Nz.2f    сек.r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>c      q.... r.   r   g      ?c                     | ddS r   r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>e  r  r.   g      ?c                     | ddS N.1fr  r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>g  r  r.      c                     |  dS )Nu    Гб.r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>i  s    Q,,, r.   r      c                     | ddS Nr  z GHzr>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>k  s    Q.... r.   gffffff@c                     | ddS r  r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>m  s    qNNNN r.   c                      t          |           S r=   )r   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>o  s    #a&& r.   c                     | ddS r  r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>q  r  r.   gQ?c                     | ddS )N.3fu    мксек.r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>s  s    3333 r.   c                     | ddS Nr  u
    мсек.r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>u      q0000 r.   g      @c                     | ddS r  r>   r   s    r,   r   z;CmfGlobalSettings.performance_server_test.<locals>.<lambda>w  r  r.   zStart test 1i@x}rL   u-   Скорость цикла (не более u	    сек.))r   r   r   r   r   zStart test 2i  z_performance_server_test2_{}    kuG   Производительность Redis (запись/чтение, u    записей)zStart test 3r   zpublic.performance_server_test3BEGINCOMMITzDROP TABLE IF EXISTS ;zCREATE TABLE z (zid integer, r   c              3   "   K   | ]
}d | dV  dS )rF   z integerNr>   .0is     r,   	<genexpr>z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s.      >>q*q***>>>>>>r.      c              3   "   K   | ]
}d | dV  dS )name_sz varcharNr>   r  s     r,   r   z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s.      @@,,,,@@@@@@r.   z);zINSERT INTO z	 VALUES (z{id}, c              3      K   | ]}| V  d S r=   r>   r  s     r,   r   z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s$      2211222222r.   c           	      r    g | ]4}d d                     t          t          j        d                     d 5S )'r     r  )joinr   stringascii_letters)r  _s     r,   
<listcomp>z=CmfGlobalSettings.performance_server_test.<locals>.<listcomp>  sA    aaaRSMRWWWV-AS%I%I%IJJMMMaaar.   zDELETE FROM z WHERE id = {id};)iduL   Производительность PostgreSQL (запись/чтение, zStart test 4i   u=   Объем памяти на сервере (не менее u    Гб.)zStart test 5   u6   Частота процессора (не менее  z GHz)zStart test 6   z5/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_frequ5   Частота процессора (не менее ru;   Частота процессора Turbo (не менее zStart test 7   u/   Количество ядер (не менее )zStart test 8   s   xxxxxxxxuN   Производительность запись/чтение на диск (u    файлов, не более zStart test 9)	redis-cliz--intrinsic-latency5   )r   r   r   r   zavg latency: ([\d.]* \w*)c              3   N   K   | ] }|                                 s|d k    |V  !dS ).N)isdigit)r  chars     r,   r   z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>8  s;      [[dllnn[PTWZPZPZPZPZPZPZ[[r.   u?   Тест виртуализации (Redis cli не более u    микросек.)u/   Тест виртуализации (Redis cli)zStart test 10	   r4  z	--latencyz-hdefaulthostz-pportz-ir5  z--rawu$   Latency до Redis (не более u    мс) min u   мс. / max u   мс. / avg u   мс.u*   Latency до Redis (не более 1мс)zTEST 10 Exception: r   z	select 1;d   b   u)   Latency до PostgreSQL (не более r  u   мс. / 98p z
Tests DONE)@tempfiler	   psutilshutilr6   rM   rN   rx   ry   r4   debugtimeAPPREDIS_DBredisr(  r   r)  digitsrangesetformatr   deleter'   r(   dpdata_driverengineconnectexecute	Exceptionrz   virtual_memorycpu_freqmaxrQ   rR   rS   rU   rf   	cpu_countTemporaryDirectoryr   O_RDWRO_CREATO_SYNCrV   closer   r   r   rg   rh   findallfloatrO   cache_settingsrY   r   minsumlensorted)Hrl   rA  ConditionTyper   r   rB  rC  reference_valuescutoff_valuer   r   startr  
test1_timetest1	key_countredis_dbdb_keynew_captchatest2_start_time
test2_timetest2	row_counttest_table_namebegincommits1s2s3s4
db_connecttest3_start_timeerr
test3_timetest3	test4_valtest4	test5_valtest5cpufreq_filetest6r[   	test6_val	test7_valtest7
file_counts_8kbtmpdirtest8_start_time
test8_timetest8	test9_restest9_stdout	test9_val	float_strtest9
test10_restest10_stdout
test10_min
test10_max
test10_avgr+  test10r   	try_counttimingsst
test11_min
test11_max
test11_avg	test11_98test11sH                                                                           r,   r   z)CmfGlobalSettings.performance_server_testC  s@    12	Q 	Q 	Q	v- 	v 	v 	v 	v 	( 	J1J 	J|  EI  J  J  J  J ..7..7..7&&	2(()4**I6  ),..733V<00&900&9-
2 	
'7':$h	*nnFA *nnY[[5(
[L[[[!#
 
 
 	
'7':$h	<%/gggfms;;;<<9;;y!! 	8 	8ALLq));7777y!! 	+ 	+ALLq))****y!! 	. 	.AOOFMM!,,----Y[[#33
y^gyyy!#
 
 
 	
'7':$h	;7_7770_000
n
dii>>E"II>>>>>>
d

dii@@eBii@@@@@@
d
6O666
h
dii22b		222222
d

diiaaW\]_W`W`aaabbb
d
@O@@@ ,3;;== 	#r"""r"""#y{{y)) / /A&&u---&&ryyAy777&&v....y)) / /A&&u---&&ryyAy777&&v..../    '77Jr"""'	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#* ~cl~~~!#
 
 
 	
'7':$h--//247<TABB	iT`iii #
 
 
 	
'7':$hOO%%)D0	`\``` #
 
 
 	
'7':$hNw~~l++ 	!M"mZf"m"m"mnnEElC(( 8AMMD047	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 LiVbiii$'!  E 	
'7':$h$$&&	UlUUU #
 
 
 	
'7':$h
E"((** 		8f#y{{z**    AVSVV < <bi"*>TWYW`>`aaAHHQ&&&HHQKKKK     '77J		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8  heo  h  h  Q]  h  h  h!#
 
 
 	
'7':$hN#M#M#MUYcevz  BF  G  G  G	 '--//JJ;\JJ	 	!!III	 	)[[[[[[[Ii((I 		U L{Zf{{{$'!  EE "M"STTE	   '7':$h	/#k)-v/DY/OPV/W)-v/DY/OPV/W)-sG)= 04RPT[_	a a aJ
 '-3355M5B5H5H5J5J2J
J!\ Z|  Z  ZXb  Z  Zpz  Z  Z  IS  Z  Z  Z%'!  FF  	/ 	/ 	/"]#PQQFGG-!--........	/ (8';$h	 ,3;;== 	/G9%% / /Y[["";///ty{{2~..../	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ \\D(
\\D(
'llS\\1T9
7OOC	#b(8$9$9:TA	 B  B  BYc  B  B  Bu  B  B  B  R\  B  B  B  nw  B  B  B  B!#
 
 
 	
wwueUE5%PUW]_efgggs   '>S;&C
R10S;1
S;R<<S.S;;S?S?(Y55Y9<Y9#`8B1_*)`*
_:4_55_::``#&`#>Bg 
h%(hhA&kkkc                  B   g } t           j                            t          j         d          sg S t                               t          j         d          D ]F}t           j                            t          j         d| d          r|                     |           G| S )Nz/custom/pluginsz/custom/plugins/z/enabled)rQ   rR   rS   rO   rP   listdirr   )resplugin_names     r,   enabled_plugin_nclistz'CmfGlobalSettings.enabled_plugin_nclistu  s    
 w~~!3DDDEE 	I::);&M&M&MNN 	( 	(Kw~~!3ZZ[ZZZ[[ (

;'''
r.   c                    |s%t           j                            d          j        }|dk    rt           j                                        }t           j        j        j        j                                        5 }|	                    d| d           d d d            n# 1 swxY w Y   t                                           |S )NT)TECHCOM_nocachez6CmfGlobalSettings:00000000-0000-0000-0000-000000000001z%update cmf_global_settings set id = 'r&  )r'   r   r   r-  gen_idrN  rO  rP  rQ  rR  	CMF_CACHEflushdb)rl   gs_id
connections      r,   fix_gsidzCmfGlobalSettings.fix_gsid  s     	J,000FFIELLL ,3355E),8?GGII UZ""#S5#S#S#STTTU U U U U U U U U U U U U U U s   9BB#&B#CmfGlobalSettings:debug)channelis_debugc                     | t           _        t                                                              | rt          j        nt          j                   t                              d|            d S )NzSet debug mode to %s)rO   DEBUGrj   	getLoggersetLevelINFOinfo)r  rD   s     r,   _change_debug_tmpz#CmfGlobalSettings._change_debug_tmp  sS      $$h%PW]]GLQQQ+X66666r.   c                  &    t          dd           d S )Nr  Tcmf_emit_server_eventr>   r.   r,   start_debug_tmpz!CmfGlobalSettings.start_debug_tmp  s    7>>>>>r.   c                  &    t          dd           d S )Nr  Fr  r>   r.   r,   stop_debug_tmpz CmfGlobalSettings.stop_debug_tmp  s    7?????r.   T)rG   closabler   enabledr  r   r  c                8   |r|st          dd           t          j                            g d          }t                              |          |_        ||_        ||_        ||_	        |r|j
        sdn	|j
        dz   |_
        |                                 dS )z\SPEC: https://bcrm.carbonsoft.ru/project/Document/DOC-016510?vf=draft#spec-016510-b
        uF   Публикуемый баннер не может быть пуст!Tr0   )announcement_bannerannouncement_banner_closableannouncement_banner_enabledannouncement_banner_colorannouncement_banner_versionr   rL   N)r4   r'   r   r   cmfutil
html_cleanr  r  r  r  r  r9   )rl   rG   r  r   r  r    rD   r   s           r,   banner_publishz CmfGlobalSettings.banner_publish  s      	m7 	m_gkllll%))   * 
 
 ")!3!3G!<!<*2'',$)0& 	}686T-|QQZ\Zx{|Z|B*
					r.   )Nrr   N)NN)Fr=   )6__name__
__module____qualname____doc__r   r   api_methodsr-   r;   r?   r9   staticmethodr   r   r   r   r   r   r   r   re   r~   classmethodr   r   rz   r   r   r   boolr   dictr   rh   compiler   r   r   r   r   r   r   r   r   r   r   r  r  on_server_eventr  r  r  r  __classcell__)rE   s   @r,   r   r      sr         &7C G
 G
 G
 
K&P P P
 
 
  
- 
- 
- 
- 
- 	=# 	= 	= 	= 	= \	= %4 % % % \% d011O233d-..OCDD $%N O O    [" !s ! ! ! [! G G# Gc Gad G G G [G,   [ = = [= H H# Ht HZbcgZh H H H [H> zz"JKK
tDz 
 
 
 [
  D    [4 zz"noo  [. 8 8 [8 9 9 [9
   [c c c< oh oh [ohb	 
 
 \
    [  _67777D 7 7 7 87 \7
 ? ? \? @ @ \@ 26\`rv   C $ VY ko    [    r.   r   )rW   sysrE  r   r)  r   r{   collectionsr   pathlibr   r   r   typingr   r   r	   werkzeug.utilsr
   cmf.includemodules.settings.fieldsr   r   r>   r.   r,   <module>r     s    



         # # # # # #       " " " " " " " " * * * * * * * * * * $ $ $ $ $ $     7 7 7 7 7 7b
 b
 b
 b
 b
+= b
 b
 b
 b
 b
r.   