/P`c@s*ddlZddlmZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZyddlmZWn!ek rddlmZnXdZdZdZdZd Zid ej6d ej6d ej6d ej6dej6dej6Z dZ!idej"6dej#6Z$dZ%i d ej6d ej6dej6d ej6d ej6dej&6dej'6dej(6dej)6dej*6Z+dZ,idej-6dej.6dej/6dej06dej16dej26d ej36Z4id!ej56d"ej66Z7d#Z8d$Z9id%e j:6d&e j;6d'e j<6d(e j=6Z>d)Z?id*e j@6d+e jA6ZBd,ZCid-e jD6d.e jE6d/e jF6d0e jG6d(e jH6ZId1ZJi d(e jK6de jL6d2e jM6d3e jN6d4e jO6d5e jP6d6e jQ6d7e jR6d8e jS6d9e jT6d:e jU6d;e jV6d<e jW6ZXd=ZYid e j6d e j6de j6de j6d e j6d>e jZ6d?e j[6d@e j\6de j&6de j)6dAe j]6dBe j^6dCe j_6dDe j`6ZadEZbid e jc6de jd6dFe je6dGe jf6dHe jg6ZhdIZidJZjidejL6d5ejP6dKejk6dGejl6ZmdLZndMZodNZpdOZqid ejK6dejL6dPejr6dQejs6ZtdRZuid ej6dej6d ej6dSejv6dTejw6dUejx6d ej6d ej6ZydVZzid e j{6dWe j|6dXe j}6dYe j~6dZe j6d[e j6d\e j6Zd]Zd^Zd_efd`YZdaefdbYZdcefddYZdeefdfYZdgefdhYZdiefdjYZdkefdlYZdS(miN(tdatetime(tsize_bytes_2_size_humantLsmErrort ErrorNumbertBatterytSystemtPooltDisktVolumet AccessGroupt FileSystemt FsSnapshott NfsExportt TargetPortt LocalDisk(t OrderedDictt,cCs\y7tjjt|tjjdtjjWntk rWtjdnXdS(Ns i(tsyststdouttwritetstrtflushtIOErrortexit(tmsg((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytout's  cCsg}t|}x8t|jD]$}||@r%|j||q%q%W|dkryt|dkrydt|Stj|S(Nis Unknown(%s)(tinttlisttkeystappendtlenthextBIT_MAP_STRING_SPLITTERtjoin(tbit_mapt conv_dicttrctcur_enum((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt_bit_map_to_str0s  cCs4t|}|t|jkr,||Sd|S(Ns Unknown(%d)(RRR(tint_typeR#((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt_enum_type_to_str<s cCswgt|jD]*\}}|j|jkr|^q}t|dkr]|dSttjd|dS(Nis Failed to convert %s to lsm type(RtitemstlowerRRRtINVALID_ARGUMENT(ttype_strR#tktvR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt _str_to_enumDs $ tUnknowntOKtErrortDegradedsPredictive failuretOthercCs t|tS(N(R&t_SYSTEM_STATUS_CONV(t system_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytsystem_status_to_strWssHW RAIDtHBAcCstj|dS(Nt(t_SYSTEM_MODE_CONVtget(t system_mode((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytsystem_mode_to_strastStoppedtReconstructingt Verifyingt InitializingtGrowingcCs t|tS(N(R&t_POOL_STATUS_CONV(t pool_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytpool_status_to_strsstPOOLtVOLUMEt VOLUME_THINt VOLUME_FULLtFStSYSTEM_RESERVEDtDELTAs Volume Grows Volume ShrinkcCs t|tS(N(R&t_POOL_ELEMENT_TYPE_CONV(t element_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytpool_element_type_to_strscCs t|tS(N(R&t_POOL_UNSUPPORTED_ACTION_CONV(tunsupported_actions((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytpool_unsupported_actions_to_strstDEFAULTtFULLtTHINtUNKNOWNcCs t|tS(N(R/t_VOL_PROVISION_CONV(tvol_provision_str((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytvol_provision_str_to_typestYestNocCs t|tS(N(R(t_VOL_ADMIN_STATE_CONV(tvol_admin_state((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytvol_admin_state_to_strstCLONEtCOPYt MIRROR_SYNCt MIRROR_ASYNCcCs t|tS(N(R/t_VOL_REP_TYPE_CONV(tvol_rep_type_str((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytvol_rep_type_str_to_typestATAtSATAtSAStFCsSCSI Over PCI-E(SSD)tSCSItNL_SAStHDDtSSDtHybrids Remote LUNcCs t|tS(N(R(t_DISK_TYPE_CONV(t disk_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_type_to_strstRemovedtStartingtStoppingt MaintenancetSparet ReconstructtFreecCs t|tS(N(R&t_DISK_STATUS_CONV(t disk_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_status_to_strstWWPNtiSCSIsiSCSI/WWPN MixedcCs t|tS(N(R(t_AG_INIT_TYPE_CONV(t init_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytag_init_type_to_strscCs t|tS(N(R/R~(t init_type_str((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytag_init_type_str_to_lsmstFCoEcCs t|tS(N(R(t_TGT_PORT_TYPE_CONV(t port_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyttgt_port_type_to_strscCsf|dkrdS|tjkr#dS|tjkr6dS|tjkrIdS|tjkr\dSt|S(NR9s No SupportR0sNon-Rotating MediumsRotating Medium Unknown Speed(RtRPM_NO_SUPPORTt RPM_UNKNOWNtRPM_NON_ROTATING_MEDIUMtRPM_ROTATING_UNKNOWN_SPEEDR(trpm((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_rpm_to_strs cCs |dkrdSt|tjS(NR9s No Support(R(t LocalDiskInfot_LINK_TYPE_MAP(t link_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_link_type_to_strs cCs`|dkrdS|tjkr#dS|tjkr6dS|tjkrIdS|tjkr\dSdS(NR9s No SupportR0tFailuretWarningtGood(RtHEALTH_STATUS_UNKNOWNtHEALTH_STATUS_FAILtHEALTH_STATUS_WARNtHEALTH_STATUS_GOOD(t health_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_health_status_to_strs tChemicalt CapacitorcCs t|tS(N(R(t_BATTERY_TYPE_CONV(t battery_type((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytbattery_type_to_str#st DischargingtChargingtLearningcCs t|tS(N(R&t_BATTERY_STATUS_CONV(tbattery_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytbattery_status_to_str3stIDENT_ONt IDENT_OFFt IDENT_UNKNOWNtFAULT_ONt FAULT_OFFt FAULT_UNKNOWNcCs t|tS(N(R&t_DISK_LED_STATUS_CONV(t led_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_led_status_to_strBscCs%|tjkrdSdt|dS(NR0s %.1f Gbpsg@@(RtLINK_SPEED_UNKNOWNtfloat(t link_speed((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytdisk_link_speed_to_strFstPlugDatacBseZdZRS(cCs||_||_dS(N(tdesctversion(tselft descriptiontplugin_version((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt__init__Ms (t__name__t __module__R(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRLstVolumeRAIDInfocBseZidej6dej6dej6dej6dej6dej6dej 6dej 6dej 6d ej 6d ej 6d ej6d ej6d ej6dej6dej6dej6Zdddddd d gZdZedZedZRS(tRAID0tRAID1tRAID3tRAID4tRAID5tRAID6tRAID10tRAID15tRAID16tRAID50tRAID60tRAID51tRAID61tJBODtMIXEDtOTHERRVcCs:||_||_||_||_||_||_dS(N(tvol_idt raid_typet strip_sizet disk_countt min_io_sizet opt_io_size(RRRRRRR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRjs      cCst|tjS(N(R(Rt_RAID_TYPE_MAP(R((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytraid_type_to_strsscCst|tjS(N(R/RR(t raid_type_str((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytraid_type_str_to_lsmws(RRRtRAID_TYPE_RAID0tRAID_TYPE_RAID1tRAID_TYPE_RAID3tRAID_TYPE_RAID4tRAID_TYPE_RAID5tRAID_TYPE_RAID6tRAID_TYPE_RAID10tRAID_TYPE_RAID15tRAID_TYPE_RAID16tRAID_TYPE_RAID50tRAID_TYPE_RAID60tRAID_TYPE_RAID51tRAID_TYPE_RAID61tRAID_TYPE_JBODtRAID_TYPE_MIXEDtRAID_TYPE_OTHERtRAID_TYPE_UNKNOWNRtVOL_CREATE_RAID_TYPES_STRRt staticmethodRR(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRRs,                  t PoolRAIDInfocBsNeZidej6dej6dej6dej6ZdZe dZ RS(R0RRcCs(||_||_||_||_dS(N(tpool_idRt member_typet member_ids(RRRRR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRs   cCst|tjS(N(R(Rt_MEMBER_TYPE_MAP(R((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytmember_type_to_strs( RRRtMEMBER_TYPE_UNKNOWNtMEMBER_TYPE_OTHERtMEMBER_TYPE_POOLtMEMBER_TYPE_DISKRRRR(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyR|s     tVcrCapcBseZdZRS(cCs||_||_||_dS(N(t system_idt raid_typest strip_sizes(RRRR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRs  (RRR(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRsRcBseZi dej6dej6dej6dej6dej6dej6dej 6dej 6dej 6d ej 6d ej 6d ej6d ej6Zd ZRS(s No SupportR0RitSSAtSBPtSRPR}RhtADTs PATA/SATAtUSBsSCSI over PCIEsPCI-Ec CsL||_||_||_||_||_||_||_||_dS(N(tsd_pathtvpd83RRt serial_numRRR( RRRRRRRRR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRs       (RRRtLINK_TYPE_NO_SUPPORTtLINK_TYPE_UNKNOWNt LINK_TYPE_FCt LINK_TYPE_SSAt LINK_TYPE_SBPt LINK_TYPE_SRPtLINK_TYPE_ISCSIt LINK_TYPE_SASt LINK_TYPE_ADTt LINK_TYPE_ATAt LINK_TYPE_USBt LINK_TYPE_SOPtLINK_TYPE_PCIERR(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRs             tVolumeRAMCacheInfocBs$eZidej6dej6dej6dej6Zidej6dej 6dej 6dej 6Z idej 6dej6dej6Zidej6dej6dej6Zidej6dej6dej6ZdZedZed Zed Zed Zed ZRS( sUse Disk SettingtEnabledtDisabledR0s Write BacktAutos Write ThroughcCs:||_||_||_||_||_||_dS(N(Rtwrite_cache_policytwrite_cache_statustread_cache_policytread_cache_statustphy_disk_cache(RRRRRRR((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyRs      cCst|tjS(N(R(R t_PHY_DISK_CACHE_STATUS_MAP(R((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytphy_disk_cache_status_to_strscCst|tjS(N(R(R t_W_CACHE_POLICY_MAP(t w_cache_p((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytw_cache_policy_to_strscCst|tjS(N(R(R t_W_CACHE_STATUS_MAP(tw_cache_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytw_cache_status_to_strscCst|tjS(N(R(R t_R_CACHE_POLICY_MAP(t r_cache_p((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytr_cache_policy_to_strscCst|tjS(N(R(R t_R_CACHE_STATUS_MAP(tr_cache_status((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pytr_cache_status_to_strs( RRRt$PHYSICAL_DISK_CACHE_USE_DISK_SETTINGtPHYSICAL_DISK_CACHE_ENABLEDtPHYSICAL_DISK_CACHE_DISABLEDtPHYSICAL_DISK_CACHE_UNKNOWNRtWRITE_CACHE_POLICY_UNKNOWNtWRITE_CACHE_POLICY_WRITE_BACKtWRITE_CACHE_POLICY_AUTOt WRITE_CACHE_POLICY_WRITE_THROUGHRtWRITE_CACHE_STATUS_UNKNOWNtWRITE_CACHE_STATUS_WRITE_BACKt WRITE_CACHE_STATUS_WRITE_THROUGHRtREAD_CACHE_POLICY_UNKNOWNtREAD_CACHE_POLICY_ENABLEDtREAD_CACHE_POLICY_DISABLEDRtREAD_CACHE_STATUS_UNKNOWNtREAD_CACHE_STATUS_ENABLEDtREAD_CACHE_STATUS_DISABLEDR RRRRRRR"(((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyR s8                  t DisplayDatac Bs eZdZdZdZeZdZiZeZ de d6Z;gZ<ie7d6e8d6e;d6e<d6ee=de>dd@dBdDdFdHdJdLdNdPd6e?d6e@d6eAd6eeB8stPathRs Serial NumberRs LED StatusRs Link SpeedRs Health StatusRttypeR9sWrite Cache PolicyRs Write CacheRsRead Cache PolicyRs Read CacheRsPhysical Disk CacheRcCsyt||}Wn4tk rI}|jtjkr@d}qJ|nX|s~|t|jkr~|||}q~n|r||krt|tkrtd|D}qt|}qn|S(NR9css|]}t|VqdS(N(R(t.0ts((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pys s( tgetattrRtcodeRt NO_SUPPORTRRRgR(tobjtkeyRCRDt flag_humant flag_enumtvaluetlsm_err((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt_get_man_pro_values   cCs]d}xPtdt|D]9}||}t|||krt||}qqW|S(Nii(trangeR(t two_d_listt column_indext max_widtht row_indextrow_data((s;/usr/lib/python2.7/site-packages/lsm/lsmcli/data_display.pyt_find_max_widths  cCsBt}tjt|}|d}|d} |d} |rLtj}ng} |tjkrxat|jD]&} | |dkrt| j| qtqtWn$|tjkrt|j} n|rx-|D]"} | | kr| j| qqWnx@| D]8}||}tj ||| | ||}|||s$ ^                                                                                                                    *E