
    %Hi9                     B    d dl  d dlZd Zd Zd Zd Zd Zd
dZd	 Zy)    )*Nc                 |    t         j                  sy t        j                  j                  j                  d| |       y )NEVA_METRICSconfigMETRICS_API_STATS_COLLECTAPPREDIS_DBredishincrbykeyvals     ./cmf/util/metrics.pywrite_counterr      s*    ++LL}c37    c                     t         j                  sy t        j                  j                  j                  d| |       t        j                  j                  j                  d| dz   d       y )Nr   #count   r   r   s     r   write_summaryr      sJ    ++LL}c37LL}c(lA>r   c                     t         j                  sy d|  d| d| }t        j                  j                  j                  d||       y )Ndeferred_job_cnt______r   r   METRICS_DEFERRED_JOB_COLLECTr	   r
   r   r   )queuenameactionr   r   s        r   write_deferred_job_counterr      sB    ..wc$s6(
;CLL}c37r   c                     t         j                  sy d|  d| d| }t        j                  j                  j                  d||       t        j                  j                  j                  d|dz   d       y )Ndeferred_job_tm___r   r   r   r   r   )r   r   r   val_msr   s        r   write_deferred_job_timingsr#      sb    ..ugSc&
:CLL}c6:LL}c(lA>r   c                 j   t         j                  sy d|  dt         j                   }|r.t        j                  j
                  j                  d|dz   d       |sy t        j                  j
                  j                  d|dz   d       t        j                  j
                  j                  d||       y )Nprof___r   r   #total_countr   r   )r   r   HOSTNAME_FQDNr	   r
   r   r   )r   duration_ms	triggeredtrack_ok_countr   s        r   
write_profr+   $   s    ++D6V112
3C""=#n2DaHLL}c(lA>LL}c;?r   c                 F   t         j                  syt        |dz        }d|  d| dt         j                   }t        j
                  j                  j                  d||       d|  d| dt         j                   d}t        j
                  j                  j                  d|d       dt        j                  v rqd	|  d| dt         j                   d}t        j                  d   j                         D ]3  \  }}t        j
                  j                  j                  d||z   |       5 d
d
d
ddd}| |v r||    }t        |      |z  }	t        |	dz        }	d|  d| dt         j                   }t        j
                  j                  j                  d||	       d|  d| dt         j                   d}t        j
                  j                  j                  d|d       | dz   |v r|| dz      }
||
v r|
|   }t        |      |z  }	t        |	dz        }	d|  d| dt         j                   }t        j
                  j                  j                  d||	       d|  d| dt         j                   d}t        j
                  j                  j                  d|d       yyy)u/  
    Считает время выполнения API-методов
    В additional_label можно записывать имя доп.метки (например, какое поле обновляли у заначи или в каком формате запросили выгрузку)
    N  api_time_time___r   r   r   r   select_countapi_time_select_count___2   i  )r   textlists)zBaseModel.all_models_metazCmfTask.update#additional_labelapi_time_sla___z#additional_label)r   r   intr'   r	   r
   r   r   gprofiler_dataitemsfloat)methoddurationadditional_labelmsecsr   kvAPI_SLAslanorm_slaadd_slas              r   write_api_timerD   /   s   
 ++EVHC(8'9V=Q=Q<R
SCLL}c59VHC(8'9V=Q=Q<RRX
YCLL}c15((4D3ESI]I]H^^ab??>288: 	@CAaLL&&}c!eQ?	@ &(	,
G@ fo<#%x$'xs+;*<C@T@T?UV""=#x@xs+;*<C@T@T?UU[\""=#q9!!W,&!445w&*+CU|c)H8d?+H#F83/?.@FDXDXCYZCLL&&}c8D#F83/?.@FDXDXCYY_`CLL&&}c1= ' -r   c                     t         j                  syt        j                  } d}t        j                  j
                  j                  dd      D ci c]  \  }}|j                         t        |      ! }}}|dz  }|dz  }|j                         D cg c](  }|j                  d      s|j                  d      r'|* c}D ]r  }|j                  d	      \  }}}}	||   }
||= |dz   |vrt        j                  d
|        A||dz      }||dz   = |d| d|	 d| d|
 d	z  }|d| d|	 d| d| d	z  }t |dz  }|dz  }|j                         D cg c](  }|j                  d      s|j                  d      r'|* c}D ]6  }|j                  d	      \  }}}}	}||   }||= |d| d|	 d| d| d| dz  }8 |dz  }|dz  }|j                         D cg c](  }|j                  d      s|j                  d      r'|* c}D ]w  }|j                  d	      \  }}}}	||   }
|
dz  }
||= |dz   |vrt        j                  d
|        F||dz      }||dz   = |d| d|	 d| d|
 d	z  }|d| d|	 d| d| d	z  }y d|v rBd|v r>|j                  d      }|j                  d      }|dz  }|dz  }|d | dz  }|d!| dz  }d"|v r$|j                  d"      }|d#z  }|d$z  }|d%| dz  }d&|v r$|j                  d&      }|d'z  }|d(z  }|d)| dz  }|d*z  }|d+z  }|d,z  }|d-z  }|j                         D cg c]:  }|j                  d.      s|j                  d      r'|j                  d/      r9|< c}D ]  }|j                  d	      \  }}}	||   }||= |dz   |vrt        j                  d0|        @||dz      }||dz   = |d1| d|	 d| dz  }|d2| d|	 d| dz  }|d/z   |v st||d/z      }||d/z   = |d3| d|	 d| dz  } |d4z  }|d5z  }|j                         D cg c]  }|j                  d6      s| c}D ]2  }|j                  d	      \  }}}}||   }||= |d7| d8| d| d| d	z  }4 |d9z  }|d:z  }|j                         D cg c](  }|j                  d;      s|j                  d      r'|* c}D ]r  }|j                  d	      \  }}}}||   }||= |dz   |vrt        j                  d<|        A||dz      }||dz   = |d=| d8| d| d| d	z  }|d>| d8| d| d| d	z  }t d?| vs| d@   t!        j                          dAz
  k  r8t!        j                          | d@<   t"        j$                  j'                         | d?<   |dBz  }|dCz  }|dD| d?    dz  }|S c c}}w c c}w c c}w c c}w c c}w c c}w c c}w )EN r   r-   )countz<# HELP eva_api_durations Number and dutrations of API calls
z!# TYPE eva_api_durations summary
r.   r   r   uR   Metrics. Error. Нет записи с количеством API вызовов: z'eva_api_durations_mseconds_sum{method="z",hostname="z
",addlbl="z"} 
z)eva_api_durations_mseconds_count{method="u_   # HELP eva_api_select_count Профайлинг количества запросов в БД
z$# TYPE eva_api_select_count summary
r0   zeva_api_select_count{method="z
",action="u   # HELP eva_api_sla Приведенное к еденице специфицированное ожидаемое время выполнения API вызовов
z# TYPE eva_api_sla summary
r4   g     @@z!eva_api_sla_mseconds_sum{method="z#eva_api_sla_mseconds_count{method=""front_cache_indexed_db_size_kbytesz(front_cache_indexed_db_size_kbytes#countuU   # HELP eva_front_cache_indexed_db_size Размер indexed_db в браузерах
z/# TYPE eva_front_cache_indexed_db_size summary
z+eva_front_cache_indexed_db_size_kbytes_sum z-eva_front_cache_indexed_db_size_kbytes_count  front_cache_evicted_by_double_f5u   # HELP eva_front_cache_evicted_by_double_f5_total Количество форс сбросов кеша по двойному f5
z:# TYPE eva_front_cache_evicted_by_double_f5_total counter
z+eva_front_cache_evicted_by_double_f5_total front_cache_evicted_by_quotau   # HELP eva_front_front_cache_evicted_by_quota_total Количество сбросов кеша по превышению квоты
z<# TYPE eva_front_front_cache_evicted_by_quota_total counter
z-eva_front_front_cache_evicted_by_quota_total u{   # HELP eva_prof_triggering Превышения допустимых таймингов в коде под make_prof_point
z## TYPE eva_prof_triggering summary
u   # HELP eva_prof_triggering_total_count Всего замеров, для построения графика Процент сработок
z/# TYPE eva_prof_triggering_total_count counter
r%   r&   ub   Metrics. Error. Нет записи с количеством eva_prof_triggering вызовов: z'eva_prof_triggering_mseconds_sum{name="z)eva_prof_triggering_mseconds_count{name="z&eva_prof_triggering_total_count{name="u?   # HELP eva_deferred_job_counters Счетчики deferred job
z)# TYPE eva_deferred_job_counters counter
r   z eva_deferred_job_counters{name="z	",queue="uQ   # HELP eva_deferred_job_timings Временные счетчики deferred job
z(# TYPE eva_deferred_job_timings summary
r!   uh   Metrics. Error. Нет записи с количеством eva_deferred_job_counters вызовов: z,eva_deferred_job_timings_mseconds_sum{name="z.eva_deferred_job_timings_mseconds_count{name="relation_cache_countrelation_cache_count_timei  u]   # HELP eva_relation_cache_records_total Количество записей в RelationCache
z.# TYPE eva_relation_cache_records_total gauge
z!eva_relation_cache_records_total )r   r   r	   metrics_cacher
   r   
hscan_iterdecoder5   keys
startswithendswithsplitr6   debugpoptimemodelsRelationCacherG   )	app_cacheresr>   r?   all_datair   r:   r<   hostnametotal_durationtotal_countr   r/   indexed_db_size_kbytesindexed_db_size_kbytes_countevicted_by_double_f5rK   _total_duration_mstotal_count2r   r   rG   s                           r   get_metrics_textrg   x   s   ++!!I
C-0\\-?-?-J-J=`d-J-efca
3q6!fHf JJC//C"--/kAQ\\:L-MVWV`V`aiVjak 
J34775>0f&!!QKX:X%GGhijhklmqz*QxZ 9&hZWabrassw  yG  xH  HJ  K  	K;F8<PXzYcdtcuuy  {F  zG  GI  J  	J
J mmC22C"--/sAQ\\:T-U^_^h^hiq^ras Q;<775>8f&&{QK/x|H:ZXhWiistzs{{  AM  @N  NP  Q  	Q	Q   t  tC))C"--/jAQ\\:K-LUVU_U_`hUiaj D34775>0f&!!'&0QKX:X%GGhijhklmqz*QxZ 3F8<zQ[\l[mmq  sA  rB  BD  E  	E5fX\(S]^n]oost  tA  AC  D  	DD ,x7<fjr<r!).R!S'/||4^'_$ggAA<=S<TTVWW>?[>\\^__)X5'||,NO  T  	TLL<=Q<RRTUU%1'/||4R'S$  Y  	YNN>?[>\\^__   J  JC11C  \  \C==C"--/  FAQ\\)-DQZZX`Majkjtjt  vD  kEa  F nGGEN4$QKQKX:X%GGxyzx{|}qz*QxZ 9$|H:UYZkYllnoo;D6hZW[\g[hhjkk^x'#An$45L>)*<TF,xjX\]i\jjlmmCn$ MMC77C"--/QAQ\\:O-PaQ g!"5$qkQK24&	%
SYRZZ^_b^cceff	g __C66C"--/mAQ\\:N-OXYXbXbckXlam 
w!"5$qkQKX:X%GG~  @A  B  C  D8$QxZ >tfIeWT^_e^ffjknjooqrr@iPUwV`ag`hhlmrlssuvv
w  Y.)<W2X[_[d[d[fim[m2m15	-.,2,@,@,F,F,H	()kkC<<C.y9O/P.QQSTTCJk g
 l t kJ F( R nsr   $V7V=,V=>V=W-W?WW2WWWW*W<W2W	W!W8W
W)N)	cmf.includerW   r   r   r   r#   r+   rD   rg    r   r   <module>rj      s2     8?8?	@F>Rzr   