API problems

Sneed

Cadet
Joined
May 23, 2022
Messages
2
Hello, i'm using the websocket API, and i'm confused by the documentation on https://www.truenas.com/docs/api/websocket.html
I am trying to use the disk.update method
this is the code i want to use:
Code:
def setdriveSettings(standbyTime, apmLevel, websock):
    for item in DRIVEIDS:
        websock.send(json.dumps({
        "id": SESSION,
        "msg": "method",
        "method": "disk.update",
        "params": [
            str(item),{
            "advpowermgmt": str(apmLevel),
            "hddstandby": str(standbyTime)
            }]
        }))
    print(websock.recv())


what i'd like to know is:
1. what is drive id?
is it something like ada1, ada2... or just 1, 2...? no idea the documentation explains nothing
2. is my request in params even correct?
there are very few examples in the documentation.
 

Samuel Tai

Never underestimate your own stupidity
Moderator
Joined
Apr 24, 2020
Messages
5,399
You can find the drive ID by running midclt call disk.query | jq. I find the WebSocket API fairly opaque, except as a guide to CLI midclt calls. I suspect these will end up with id=1,2,3, etc.
 

Sneed

Cadet
Joined
May 23, 2022
Messages
2
You can find the drive ID by running midclt call disk.query | jq. I find the WebSocket API fairly opaque, except as a guide to CLI midclt calls. I suspect these will end up with id=1,2,3, etc.
I am using the proper drive id then, but i keep getting an error 22 for some reason.
i don't know what the problem might be, but ill leave the error message i keep getting
, "locals": {"self": "<middlewared.main.Application object at 0x821ae8670>", "message": "{'id': '', 'msg': 'method', 'method': 'disk.update', 'params': ['5', {'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}]}", "serviceobj": "<middlewared.service.CompoundService object at 0x81b0d0310>", "methodobj": "<bound method CRUDService.update of <middlewared.plugins.disk.DiskService object at 0x81b0d0a30>>", "params": "['5', {'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}]", "e": "MatchNotFound()", "adapted": "None"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/main.py", "lineno": 1262, "method": "_call", "line": " return await methodobj(*prepared_call.args)\n", "argspec": ["self", "name", "serviceobj", "methodobj", "params"], "keywordspec": "kwargs", "locals": {"self": "<middlewared.main.Middleware object at 0x8042b5fd0>", "name": "'disk.update'", "serviceobj": "<middlewared.service.CompoundService object at 0x81b0d0310>", "methodobj": "<bound method CRUDService.update of <middlewared.plugins.disk.DiskService object at 0x81b0d0a30>>", "params": "['5', {'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}]", "kwargs": "{'app': <middlewared.main.Application object at 0x821ae8670>, 'io_thread': False}", "prepared_call": "<middlewared.main.PreparedCall object at 0x8219f5c40>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/service.py", "lineno": 506, "method": "update", "line": " rv = await self.middleware._call(\n", "argspec": ["self", "app", "id", "data"], "locals": {"self": "<middlewared.plugins.disk.DiskService object at 0x81b0d0a30>", "app": "<middlewared.main.Application object at 0x821ae8670>", "id": "'5'", "data": "{'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/main.py", "lineno": 1262, "method": "_call", "line": " return await methodobj(*prepared_call.args)\n", "argspec": ["self", "name", "serviceobj", "methodobj", "params"], "keywordspec": "kwargs", "locals": {"self": "<middlewared.main.Middleware object at 0x8042b5fd0>", "name": "'disk.update'", "serviceobj": "<middlewared.plugins.disk.DiskService object at 0x81b0d0a30>", "methodobj": "<bound method accepts.<locals>.wrap.<locals>.nf of <middlewared.plugins.disk.DiskService object at 0x81b0d0a30>>", "params": "['5', {'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}]", "kwargs": "{'app': <middlewared.main.Application object at 0x821ae8670>}", "prepared_call": "<middlewared.main.PreparedCall object at 0x8219f5700>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/schema.py", "lineno": 975, "method": "nf", "line": " return await f(*args, **kwargs)\n", "varargspec": "args", "keywordspec": "kwargs", "locals": {"args": "('***', '***', '***')", "kwargs": "{}", "clean_and_validate_args": "<function accepts.<locals>.wrap.<locals>.clean_and_validate_args at 0x816b98820>", "f": "<function DiskService.do_update at 0x816b98790>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/plugins/disk.py", "lineno": 209, "method": "do_update", "line": " old = await self.middleware.call(\n", "argspec": ["self", "id", "data"], "locals": {"self": "<middlewared.plugins.disk.DiskService object at 0x81b0d0a30>", "id": "'5'", "data": "{'advpowermgmt': '254', 'hddstandby': 'ALWAYS ON'}"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/main.py", "lineno": 1305, "method": "call", "line": " return await self._call(\n", "argspec": ["self", "name", "pipes", "job_on_progress_cb", "app", "profile"], "varargspec": "params", "locals": {"self": "<middlewared.main.Middleware object at 0x8042b5fd0>", "name": "'datastore.query'", "pipes": "None", "job_on_progress_cb": "None", "app": "None", "profile": "False", "params": "('***', '***', '***')", "serviceobj": "<middlewared.service.CompoundService object at 0x81b0cab20>", "methodobj": "<bound method accepts.<locals>.wrap.<locals>.nf of <middlewared.plugins.datastore.read.DatastoreService object at 0x81b0d00a0>>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/main.py", "lineno": 1262, "method": "_call", "line": " return await methodobj(*prepared_call.args)\n", "argspec": ["self", "name", "serviceobj", "methodobj", "params"], "keywordspec": "kwargs", "locals": {"self": "<middlewared.main.Middleware object at 0x8042b5fd0>", "name": "'datastore.query'", "serviceobj": "<middlewared.service.CompoundService object at 0x81b0cab20>", "methodobj": "<bound method accepts.<locals>.wrap.<locals>.nf of <middlewared.plugins.datastore.read.DatastoreService object at 0x81b0d00a0>>", "params": "('storage.disk', [['identifier', '=', '5']], {'get': True, 'prefix': 'disk_'})", "kwargs": "{'app': None, 'io_thread': True, 'job_on_progress_cb': None, 'pipes': None}", "prepared_call": "<middlewared.main.PreparedCall object at 0x8219f5730>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/schema.py", "lineno": 975, "method": "nf", "line": " return await f(*args, **kwargs)\n", "varargspec": "args", "keywordspec": "kwargs", "locals": {"args": "('***', '***', '***', '***')", "kwargs": "{}", "clean_and_validate_args": "<function accepts.<locals>.wrap.<locals>.clean_and_validate_args at 0x819e3a700>", "f": "<function DatastoreService.query at 0x819e3a670>"}}, {"filename": "/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/read.py", "lineno": 174, "method": "query", "line": " raise MatchNotFound()\n", "argspec": ["self", "name", "filters", "options"], "locals": {"self": "<middlewared.plugins.datastore.read.DatastoreService object at 0x81b0d00a0>", "name": "'storage.disk'", "filters": "[['identifier', '=', '5']]", "options": "{'get': True, 'prefix': 'disk_', 'relationships': True, 'extend': None, 'extend_context': None, 'extra': {}, 'order_by': [], 'select': [], 'count': False, 'offset': 0, 'limit': 0, 'force_sql_filters': False}", "table": "Table('storage_disk', MetaData(), Column('disk_identifier', String(length=42), table=<storage_disk>, primary_key=True, nullable=False), Column('disk_name', String(length=120), table=<storage_disk>, nullable=False), Column('disk_subsystem', String(length=10), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_number', Integer(), table=<storage_disk>, nullable=False, default=ColumnDefault(1)), Column('disk_serial', String(length=30), table=<storage_disk>, nullable=False), Column('disk_lunid', String(length=30), table=<storage_disk>), Column('disk_size', String(length=20), table=<storage_disk>, nullable=False), Column('disk_multipath_name', String(length=30), table=<storage_disk>, nullable=False), Column('disk_multipath_member', String(length=30), table=<storage_disk>, nullable=False), Column('disk_description', String(length=120), table=<storage_disk>, nullable=False), Column('disk_transfermode', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Auto')), Column('disk_hddstandby', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Always On')), Column('disk_hddstandby_force', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(False)), Column('disk_advpowermgmt', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_acousticlevel', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_togglesmart', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(True)), Column('disk_smartoptions', String(length=120), table=<storage_disk>, nullable=False), Column('disk_expiretime', DateTime(), table=<storage_disk>), Column('disk_enclosure_slot', Integer(), table=<storage_disk>), Column('disk_passwd', EncryptedText(), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_critical', Integer(), table=<storage_disk>), Column('disk_difference', Integer(), table=<storage_disk>), Column('disk_informational', Integer(), table=<storage_disk>), Column('disk_model', String(length=200), table=<storage_disk>), Column('disk_rotationrate', Integer(), table=<storage_disk>), Column('disk_type', String(length=20), table=<storage_disk>, nullable=False, default=ColumnDefault('UNKNOWN')), Column('disk_kmip_uid', String(length=255), table=<storage_disk>), Column('disk_zfs_guid', String(length=20), table=<storage_disk>), Column('disk_bus', String(length=20), table=<storage_disk>, nullable=False), schema=None)", "aliases": "{}", "qs": "<sqlalchemy.sql.selectable.Select object at 0x8219f55b0>", "columns": "[Column('disk_identifier', String(length=42), table=<storage_disk>, primary_key=True, nullable=False), Column('disk_name', String(length=120), table=<storage_disk>, nullable=False), Column('disk_subsystem', String(length=10), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_number', Integer(), table=<storage_disk>, nullable=False, default=ColumnDefault(1)), Column('disk_serial', String(length=30), table=<storage_disk>, nullable=False), Column('disk_lunid', String(length=30), table=<storage_disk>), Column('disk_size', String(length=20), table=<storage_disk>, nullable=False), Column('disk_multipath_name', String(length=30), table=<storage_disk>, nullable=False), Column('disk_multipath_member', String(length=30), table=<storage_disk>, nullable=False), Column('disk_description', String(length=120), table=<storage_disk>, nullable=False), Column('disk_transfermode', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Auto')), Column('disk_hddstandby', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Always On')), Column('disk_hddstandby_force', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(False)), Column('disk_advpowermgmt', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_acousticlevel', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_togglesmart', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(True)), Column('disk_smartoptions', String(length=120), table=<storage_disk>, nullable=False), Column('disk_expiretime', DateTime(), table=<storage_disk>), Column('disk_enclosure_slot', Integer(), table=<storage_disk>), Column('disk_passwd', EncryptedText(), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_critical', Integer(), table=<storage_disk>), Column('disk_difference', Integer(), table=<storage_disk>), Column('disk_informational', Integer(), table=<storage_disk>), Column('disk_model', String(length=200), table=<storage_disk>), Column('disk_rotationrate', Integer(), table=<storage_disk>), Column('disk_type', String(length=20), table=<storage_disk>, nullable=False, default=ColumnDefault('UNKNOWN')), Column('disk_kmip_uid', String(length=255), table=<storage_disk>), Column('disk_zfs_guid', String(length=20), table=<storage_disk>), Column('disk_bus', String(length=20), table=<storage_disk>, nullable=False)]", "from_": "Table('storage_disk', MetaData(), Column('disk_identifier', String(length=42), table=<storage_disk>, primary_key=True, nullable=False), Column('disk_name', String(length=120), table=<storage_disk>, nullable=False), Column('disk_subsystem', String(length=10), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_number', Integer(), table=<storage_disk>, nullable=False, default=ColumnDefault(1)), Column('disk_serial', String(length=30), table=<storage_disk>, nullable=False), Column('disk_lunid', String(length=30), table=<storage_disk>), Column('disk_size', String(length=20), table=<storage_disk>, nullable=False), Column('disk_multipath_name', String(length=30), table=<storage_disk>, nullable=False), Column('disk_multipath_member', String(length=30), table=<storage_disk>, nullable=False), Column('disk_description', String(length=120), table=<storage_disk>, nullable=False), Column('disk_transfermode', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Auto')), Column('disk_hddstandby', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Always On')), Column('disk_hddstandby_force', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(False)), Column('disk_advpowermgmt', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_acousticlevel', String(length=120), table=<storage_disk>, nullable=False, default=ColumnDefault('Disabled')), Column('disk_togglesmart', Boolean(), table=<storage_disk>, nullable=False, default=ColumnDefault(True)), Column('disk_smartoptions', String(length=120), table=<storage_disk>, nullable=False), Column('disk_expiretime', DateTime(), table=<storage_disk>), Column('disk_enclosure_slot', Integer(), table=<storage_disk>), Column('disk_passwd', EncryptedText(), table=<storage_disk>, nullable=False, default=ColumnDefault('')), Column('disk_critical', Integer(), table=<storage_disk>), Column('disk_difference', Integer(), table=<storage_disk>), Column('disk_informational', Integer(), table=<storage_disk>), Column('disk_model', String(length=200), table=<storage_disk>), Column('disk_rotationrate', Integer(), table=<storage_disk>), Column('disk_type', String(length=20), table=<storage_disk>, nullable=False, default=ColumnDefault('UNKNOWN')), Column('disk_kmip_uid', String(length=255), table=<storage_disk>), Column('disk_zfs_guid', String(length=20), table=<storage_disk>), Column('disk_bus', String(length=20), table=<storage_disk>, nullable=False), schema=None)", "prefix": "'disk_'", "order_by": "[]", "result": "[]", "relationships": "[]"}}], "formatted": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/read.py\", line 172, in query\n return result[0]\nIndexError: list index out of range\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 140, in call_method\n result = await self.middleware._call(message['method'], serviceobj, methodobj, params, app=self,\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1262, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/service.py\", line 506, in update\n rv = await self.middleware._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1262, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 975, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/disk.py\", line 209, in do_update\n old = await self.middleware.call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1305, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1262, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 975, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/read.py\", line 174, in query\n raise MatchNotFound()\nmiddlewared.service_exception.MatchNotFound\n"}, "extra": null}}"]
 
Top