def sessions(self, filters=None, options=None): """ Returns list of active auth sessions. Example of return value: [ { "id": "NyhB1J5vjPjIV82yZ6caU12HLA1boDJcZNWuVQM4hQWuiyUWMGZTz2ElDp7Yk87d", "origin": "192.168.0.3:40392", "credentials": "TOKEN", "internal": False, "created_at": {"$date": 1545842426070}, "last_active": {"$date": 1545842487816} } ] `credentials` can be `UNIX_SOCKET`, `ROOT_TCP_SOCKET`, `TRUENAS_NODE`, `LOGIN_PASSWORD` or `TOKEN`, depending on what authentication method was used. If you want to exclude all internal connections from the list, call this method with following arguments: [ [ ["internal", "=", True] ] ] """ return filter_list( [ dict(id=session_id, internal=is_internal_session(session), **session.dump()) for session_id, session in sorted( self.session_manager.sessions.items(), key=lambda t: t[1].created_at) ], filters, options, )
def sessions(self, filters=None, options=None): """ Returns list of active auth sessions. Example of return value: [ { "id": "NyhB1J5vjPjIV82yZ6caU12HLA1boDJcZNWuVQM4hQWuiyUWMGZTz2ElDp7Yk87d", "origin": "192.168.0.3:40392", "credentials": "TOKEN", "internal": False, "created_at": {"$date": 1545842426070} } ] `credentials` can be `UNIX_SOCKET`, `ROOT_TCP_SOCKET`, `TRUENAS_NODE`, `LOGIN_PASSWORD` or `TOKEN`, depending on what authentication method was used. If you want to exclude all internal connections from the list, call this method with following arguments: [ [ ["internal", "=", True] ] ] """ return filter_list( [ dict(id=session_id, internal=is_internal_session(session), **session.dump()) for session_id, session in sorted(self.session_manager.sessions.items(), key=lambda t: t[1].created_at) ], filters, options, )
async def results(self, filters, options): """ Get disk(s) S.M.A.R.T. test(s) results. .. examples(websocket):: Get all disks tests results :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "smart.test.results", "params": [] } returns :::javascript [ # ATA disk { "disk": "ada0", "tests": [ { "num": 1, "description": "Short offline", "status": "SUCCESS", "status_verbose": "Completed without error", "remaining": 0.0, "lifetime": 16590, "lba_of_first_error": None, } ] }, # SCSI disk { "disk": "ada1", "tests": [ { "num": 1, "description": "Background long", "status": "FAILED", "status_verbose": "Completed, segment failed", "segment_number": None, "lifetime": 3943, "lba_of_first_error": None, } ] }, ] Get specific disk test results :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "smart.test.results", "params": [ [["disk", "=", "ada0"]], {"get": true} ] } returns :::javascript { "disk": "ada0", "tests": [ { "num": 1, "description": "Short offline", "status": "SUCCESS", "status_verbose": "Completed without error", "remaining": 0.0, "lifetime": 16590, "lba_of_first_error": None, } ] } """ get = (options or {}).pop("get", False) disks = filter_list( [{"disk": disk["name"]} for disk in await self.middleware.call("disk.query")], filters, options, ) devices = await self.middleware.call('device.get_storage_devices_topology') return filter_list( list(filter( None, await asyncio_map(functools.partial(annotate_disk_smart_tests, self.middleware, devices), disks, 16) )), [], {"get": get}, )