3 Yd3@sPddlZddlZddlmZdgZejjZGdddeZ GdddeZ dS)N)consts Inventoryc@s\eZdZdZdddZddZdd Zd d Zd d ZddZ ddZ ddZ dddZ dS)rz Inventory object can handle information about available hardware devices. It also informs the plugins about related hardware events. NTc Cs|dk r||_n tj|_|dkr(tj}|j|j|_|dkrDtj}|rxy|jj|Wnt k rvt j dYnX|dkrt }||_ d|_i|_dS)NzLcannot set udev monitor receive buffer size, we are probably running inside zIcontainer or with limited capabilites, TuneD functionality may be limitedzcannot set udev monitor receive buffer size, we are probably running inside container or with limited capabilites, TuneD functionality may be limited) _udev_contextpyudevZContextZMonitorZ from_netlink _udev_monitorrZCFG_DEF_UDEV_BUFFER_SIZEset_receive_buffer_sizeEnvironmentErrorlogwarn_MonitorObserverFactory_monitor_observer_factory_monitor_observer_subscriptions)selfZ udev_contextZudev_monitor_clsZmonitor_observer_factory buffer_sizerr/usr/lib/python3.6/inventory.py__init__s&  zInventory.__init__c Cs:ytjj|j||Stk r4tjj|j||SXdS)z9Get a pyudev.Device object for the sys_name (e.g. 'sda').N)rZDevices from_namerAttributeErrorZDevice)r subsystemZsys_namerrr get_device)szInventory.get_devicecCs|jj|dS)z)Get list of devices on a given subsystem.)r)rZ list_devices)rrrrr get_devices1szInventory.get_devicescCsx|j|jkrdSxb|j|jD]R\}}y|||Wqtk rn}ztjd|tj|WYdd}~XqXqWdS)Nz+Exception occured in event handler of '%s'.)rr Exceptionr errorZ exception)rZeventZdeviceplugincallbackerrr_handle_udev_event5s zInventory._handle_udev_eventcCs\tjd||f||f}||jkr6|j|j|n"|g|j|<|jj||jjdS)z7Register handler of device events on a given subsystem.zadding handler: %s (%s)N)r debugrappendrZ filter_bystart)rrrr callback_datarrr subscribe@s   zInventory.subscribecCs6|jdkr2tjd|jj|j|j|_|jjdS)Nzstarting monitor observer)r r rr createrrr!)rrrrstart_processing_eventsLs  z!Inventory.start_processing_eventscCs(|jdk r$tjd|jjd|_dS)Nzstopping monitor observer)r r rstop)rrrrstop_processing_eventsRs   z Inventory.stop_processing_eventscCsJxD|j|D]6}|\}}||kr tjd||f|j|j|q WdS)Nzremoving handler: %s (%s))rr rremove)rrrr"Z_pluginrrrr_unsubscribe_subsystemXs z Inventory._unsubscribe_subsystemcCsfg}xF|jD]<}|dks ||kr |j||t|j|dkr |j|q Wx|D] }|j|=qRWdS)z4Unregister handler registered with subscribe method.Nr)rr)lenr )rrrZempty_subsystemsZ _subsystemrrr unsubscribe_s   zInventory.unsubscribe)NNNNT)N) __name__ __module__ __qualname____doc__rrrrr#r%r'r)r+rrrrr s   c@seZdZddZdS)r cOs tj||S)N)rZMonitorObserver)rargskwargsrrrr$lsz_MonitorObserverFactory.createN)r,r-r.r$rrrrr ksr ) rZ tuned.logsZtunedr__all__Zlogsgetr objectrr rrrrs   b