r|w ddlZddlZddlmZddlmZddlmZmZm Z m Z m Z m Z m Z ddlmZmZmZmZedzZdd d d Zd d dZd d dZddZdZddZdZdS)N) mod_makedirs)lve_stats2_lib)boolean_to_yes_nois_positive_intmin_num_notify_converter repack_dictstr_to_booleantime_convertor_to_dicttime_unit_to_letter)LveStats2ExceptionStatsNotifierConfigStatsNotifierDir faults_dictz /resellers.d/notifyResellernotifyResellerOnCustomersnotifyCustomers)NOTIFY_RESELLER_ON_TOTAL_FAULTS#NOTIFY_RESELLER_ON_CUSTOMERS_FAULTSNOTIFY_CUSTOMERS_ON_FAULTSresellercustomer)NOTIFY_MIN_FAULTS_RESELLERNOTIFY_MIN_FAULTS_CUSTOMER)NOTIFY_INTERVAL_RESELLERNOTIFY_INTERVAL_CUSTOMERrc&t||dS)Nutf-8)modeencoding)open) file_namer s &py/clconfig/lve_stats2_reseller_lib.py_openr%/s  w 7 7 77c~tjdfddD}ddddddddd dd d dd d d dd d dd d d|d diS)z; Creates default StatsNotifier config for reseller faultsNotificationc.i|]}|d|S)faultsToInclude).0key admin_configs r$ z3_create_default_reseller_config..8s2#C&78=r&)memiopsionprocconcurrentConnectionscpunotifyResellersminimumNumberOfFaultsToNotifyadminuser)rrnotify unitOfTimeperiod)r;r<notifyResellerCustomers)rr7rr:r*r)rget_notificationget) admin_faultsr.s @r$_create_default_reseller_configrA3s"244889MNNLJL !*67H*I)*IJ7S)*IJ6R/T/T ,,=>3?3I'3RS_3`/;H/Eg/Nx/X%Z%Z3?3I&3QR^3_/;H/Ef/Mh/W%Y%Y !- ,-F G    r&Fc|tdtjt|d}tj|s|rt niS t|}|}| n>#ttf$r*}tdt|zd|id|d}~wwxYwi}|D]_}|ds|dkr0|d \}} | ||<`t"} t$} t&} t(} t+| |t,}t+| |t,}t+| |t.d }t+| |t0}||d <||d <||d<d|iS)ak Retrieves lve-stats2 notifications parameters for resellers :param bool defaults: True if we want get defaults when config is not set, else False :param str reseller: reseller name, if we want notifications parameters for a reseller :return: dict. For example: {'faultsNotification': {'notifyResellerCustomers': True, 'notifyResellers': True, 'minimumNumberOfFaultsToNotify': {'admin': 0, 'user': 0}, 'notifyAdmin': True, 'notify': {'admin': {'unitOfTime': 'hours', 'period': 12}, 'user': {'unitOfTime': 'hours', 'period': 12} }, 'faultsToInclude': {'mem': True, 'iops': False, 'io': False, 'nproc': False, 'concurrentConnections': False, 'cpu': True}, 'notifyCustomers': False } } Nreseller can`t be None_StatsNotifier.cfg%(lvestats_cfg)s read error: lvestats_cfgmessagecontext#=r)defaultr*r7r:r() ValueErrorospathjoinResellerStatsNotifierDirexistsrAr% readlinescloseIOErrorOSErrorr str startswithstripsplitreseller_notify_dictrreseller_number_notify_dictreseller_notify_time_dictr r rr )rdefaults config_pathfconfige config_dictliner-valuenotify_dfaults_dnumber_notify_d notify_time_dfaults_notification_dictfaults_include_dictmin_num_notify period_notifys r$r>r>Ks(1222',,7H9X9X9XYYK 7>>+ & &E4<D.000"DT +    W TTT -LsSTvv-U.#t,t6f$r*}t%d/t'|zd |id |d}~wwxYw|D]\}} | |d.|  t;|dd125}|d3| dddn #1swxYwYn>#t t"f$r*}t%d4t'|zd |id |d}~wwxYwt?j d5d6d7d89dS):a Sets lve-stats2 notifications parameters :param parameters_dict: Parametres to set. For example: {u'notifyResellers': True, u'faultsToInclude': {u'mem': True, u'iops': False, u'io': False, u'nproc': False, u'concurrentConnections': False, u'cpu': True}, u'minimumNumberOfFaultsToNotify': {u'admin': 0, u'user': 0}, u'notifyAdmin': True, u'notify': {u'admin': {u'unitOfTime': u'hours', u'period': 12}, u'user': {u'unitOfTime': u'hours', u'period': 12} }, u'notifyResellerCustomers': True, u'notifyCustomers': False } :param str reseller: either reseller name or None rNrCrD)riwc6g|]}|Sr+rZr,res r$ z$set_notification..s ??? ???r&rErFrGc t|SNrxs r$z"set_notification..s2CA2F2Fr&zfaultsToInclude/cpuc t|Srvrwrxs r$rzz"set_notification..s4Ea4H4Hr&zfaultsToInclude/nprocc t|Srvrwrxs r$rzz"set_notification..1B11E1Er&zfaultsToInclude/ioc t|Srvrwrxs r$rzz"set_notification..s5Fq5I5Ir&zfaultsToInclude/memc t|Srvrwrxs r$rzz"set_notification..r}r&z%faultsToInclude/concurrentConnectionsc t|Srvrwrxs r$rzz"set_notification..s3DQ3G3Gr&zfaultsToInclude/iops) NOTIFY_CPU NOTIFY_NPROC NOTIFY_IO NOTIFY_MEMORY NOTIFY_EP NOTIFY_IOPScBt|t|Srvrr ryys r$rzz"set_notification..#_Q5G5G2aI\]^I_I_2a2ar&znotify/reseller/periodznotify/reseller/unitOfTimecBt|t|Srvrrs r$rzz"set_notification..rr&znotify/customer/periodznotify/customer/unitOfTimec t|Srvrwrxs r$rzz"set_notification..s6G6J6Jr&rc t|Srvrwrxs r$rzz"set_notification..s:KA:N:Nr&rc t|Srvrwrxs r$rzz"set_notification..r}r&rz&minimumNumberOfFaultsToNotify/resellerz&minimumNumberOfFaultsToNotify/customer)rrrrrrrc|d} }|D] }||} n%#t$rd}|D] }||} YnwxYw|S)N/r()r[KeyError)rP path_partspointpartnotifier_paramsparameters_dicts r$get_val_by_pathz)set_notification..get_val_by_pathsZZ__  $#E" $ $d  $ $ $ $#$89E" $ $d  $ $ $ s(A  A c3.K|]}|VdSrvr+)r,ryrs r$ z#set_notification..s-*O*O!??1+=+=*O*O*O*O*O*Or&rc6g|]}|Sr+rrrss r$rtz$set_notification..s ===tzz||===r&rJrKrLz%(lvestats_cfg)s format error: z: r)r! z%(lvestats_cfg)s write error: z+/sbin/service lvestats reload &>/dev/null &Tz /bin/bashF)shell executablecheck)!rOrPrSrlenrNrQrRupdaterAr>dirnamerr%rUrTrVrWr rXitems isinstancer enumeraterYrZr[ IndexErrorappendr" writelines subprocessrun)rrr`ra config_linesrcfaults_config_map new_configr-valconfig_to_writeidxrerfrrs` @@r$set_notificationrsa& 7>>- . .#o2F2F!2K2KO1222',,7H9X9X9XYYK 7>>+ & &D>@@AAAA/BBBCCC 7>>"'//+66 7 7:RW__[115999 7>>+ & &( k3%%'''\ +  ?????   W \\\ -LsSTvv-U.<>Q-R"T"TUUZ[ \\ )G(FH]'^*H*HJa)b'E'EG[&\+I+IK`*a'E'EGn&o)G)GI_(` bb%a%a%=%A%C&b%a%=%A%C-K,JL\+]0N0NPk/l'E'EGX&Y&N&N P P Q Q QJ      &++--S #s## Q"1/#"6"6 3"(#a&*O*O*O*Os122w*O*O*O"P 3    H >= ===OT"<00 $ $ICs## tzz||r'9'9 F!ZZ__ UU F F F(@cAgCWCWQUCWCWW . <*>*>??DEF Fj  *-'A'A 3'A'A$sO $ j !TTT -NQTUVQWQW-W.> K  K ANL76N7 M& M!!M&&NN=%N88N=5Q)P<0 Q<QQQQR%Q>>R)r)F)rOrclcommon.utilsrrKrclconfig_utilsrrrr r r r r rrrrRr\r]r^r%rAr>rr+r&r$rsi ''''''cbbbbbbbbbbb+o=(8+F"3#-", !+ *888807<7<7<7