REST Request:
-------------------------------
PUT /sysadm/zfs
{
"action" : "datasets",
"zpool" : "tank"
}
WebSocket Request:
-------------------------------
{
"namespace" : "sysadm",
"id" : "fooid",
"args" : {
"action" : "datasets",
"zpool" : "tank"
},
"name" : "zfs"
}
Response:
-------------------------------
{
"args": {
"datasets": {
"tank": {
"avail": "320G",
"mountpoint": "none",
"refer": "96K",
"used": "125G"
},
"tank/ROOT": {
"avail": "320G",
"mountpoint": "none",
"refer": "96K",
"used": "63.7G"
},
"tank/ROOT/11.0-CURRENTAPRIL2016-up-20160418_124146": {
"avail": "320G",
"mountpoint": "/",
"refer": "34.7G",
"used": "63.7G"
},
"tank/ROOT/11.0-CURRENTFEB2016-up-20160303_094216": {
"avail": "320G",
"mountpoint": "/",
"refer": "29.7G",
"used": "272K"
},
"tank/ROOT/11.0-CURRENTMAR2016-up-20160304_102405": {
"avail": "320G",
"mountpoint": "/",
"refer": "30.5G",
"used": "248K"
},
"tank/ROOT/11.0-CURRENTMAR2016-up-20160315_092952": {
"avail": "320G",
"mountpoint": "/",
"refer": "31.2G",
"used": "256K"
},
"tank/ROOT/11.0-CURRENTMAR2016-up-20160318_090405": {
"avail": "320G",
"mountpoint": "/",
"refer": "34.7G",
"used": "280K"
},
"tank/ROOT/initial": {
"avail": "320G",
"mountpoint": "/mnt",
"refer": "5.60G",
"used": "232K"
},
"tank/iocage": {
"avail": "320G",
"mountpoint": "/iocage",
"refer": "152K",
"used": "1.13G"
},
"tank/iocage/.defaults": {
"avail": "320G",
"mountpoint": "/iocage/.defaults",
"refer": "96K",
"used": "992K"
},
"tank/iocage/download": {
"avail": "320G",
"mountpoint": "/iocage/download",
"refer": "96K",
"used": "203M"
},
"tank/iocage/download/10.2-RELEASE": {
"avail": "320G",
"mountpoint": "/iocage/download/10.2-RELEASE",
"refer": "202M",
"used": "202M"
},
"tank/iocage/jails": {
"avail": "320G",
"mountpoint": "/iocage/jails",
"refer": "104K",
"used": "1000K"
},
"tank/iocage/releases": {
"avail": "320G",
"mountpoint": "/iocage/releases",
"refer": "96K",
"used": "953M"
},
"tank/iocage/releases/10.2-RELEASE": {
"avail": "320G",
"mountpoint": "/iocage/releases/10.2-RELEASE",
"refer": "96K",
"used": "952M"
},
"tank/iocage/releases/10.2-RELEASE/root": {
"avail": "320G",
"mountpoint": "/iocage/releases/10.2-RELEASE/root",
"refer": "825M",
"used": "951M"
},
"tank/iocage/templates": {
"avail": "320G",
"mountpoint": "/iocage/templates",
"refer": "96K",
"used": "992K"
},
"tank/iohyve": {
"avail": "320G",
"mountpoint": "/iohyve",
"refer": "96K",
"used": "22.8G"
},
"tank/iohyve/Firmware": {
"avail": "320G",
"mountpoint": "/iohyve/Firmware",
"refer": "96K",
"used": "992K"
},
"tank/iohyve/ISO": {
"avail": "320G",
"mountpoint": "/iohyve/ISO",
"refer": "96K",
"used": "453M"
},
"tank/iohyve/ISO/FreeBSD-10.1-RELEASE-amd64-bootonly.iso": {
"avail": "320G",
"mountpoint": "/iohyve/ISO/FreeBSD-10.1-RELEASE-amd64-bootonly.iso",
"refer": "219M",
"used": "220M"
},
"tank/iohyve/ISO/FreeBSD-10.2-RELEASE-amd64-bootonly.iso": {
"avail": "320G",
"mountpoint": "/iohyve/ISO/FreeBSD-10.2-RELEASE-amd64-bootonly.iso",
"refer": "231M",
"used": "232M"
},
"tank/iohyve/bsdguest": {
"avail": "320G",
"mountpoint": "/iohyve/bsdguest",
"refer": "96K",
"used": "22.4G"
},
"tank/iohyve/bsdguest/disk0": {
"avail": "341G",
"mountpoint": "-",
"refer": "1.75G",
"used": "22.4G"
},
"tank/tmp": {
"avail": "320G",
"mountpoint": "/tmp",
"refer": "2.95M",
"used": "18.3M"
},
"tank/usr": {
"avail": "320G",
"mountpoint": "none",
"refer": "96K",
"used": "37.5G"
},
"tank/usr/home": {
"avail": "320G",
"mountpoint": "/usr/home",
"refer": "96K",
"used": "27.8G"
},
"tank/usr/home/kris": {
"avail": "320G",
"mountpoint": "/usr/home/kris",
"refer": "21.9G",
"used": "27.8G"
},
"tank/usr/jails": {
"avail": "320G",
"mountpoint": "/usr/jails",
"refer": "96K",
"used": "992K"
},
"tank/usr/obj": {
"avail": "320G",
"mountpoint": "/usr/obj",
"refer": "4.68G",
"used": "4.75G"
},
"tank/usr/ports": {
"avail": "320G",
"mountpoint": "/usr/ports",
"refer": "2.20G",
"used": "2.96G"
},
"tank/usr/src": {
"avail": "320G",
"mountpoint": "/usr/src",
"refer": "1.82G",
"used": "2.01G"
},
"tank/var": {
"avail": "320G",
"mountpoint": "none",
"refer": "96K",
"used": "13.5M"
},
"tank/var/audit": {
"avail": "320G",
"mountpoint": "/var/audit",
"refer": "96K",
"used": "992K"
},
"tank/var/log": {
"avail": "320G",
"mountpoint": "/var/log",
"refer": "1.43M",
"used": "5.21M"
},
"tank/var/mail": {
"avail": "320G",
"mountpoint": "/var/mail",
"refer": "120K",
"used": "1.21M"
},
"tank/var/tmp": {
"avail": "320G",
"mountpoint": "/var/tmp",
"refer": "3.20M",
"used": "5.99M"
}
}
},
"id": "fooid",
"name": "response",
"namespace": "sysadm"
}
Table of Contents generated with DocToc
SysAdm
Official repo for PC-BSD's sysadm middleware WebSocket & REST server
This middleware acts as the core for controlling a PC-BSD or FreeBSD
system either locally or remotely via WebSockets or REST. It is also the
server component to PC-BSD's SysAdm GUI client.
Required Qt Modules
Qt5 Core (pkg install qt5-core)
Qt5 Concurrent (pkg install qt5-concurrent)
Qt5 Websockets (pkg install qt5-websockets)
Building SysAdm
% git clone https://github.com/pcbsd/sysadm.git
% cd sysadm/src
% /usr/local/lib/qt5/bin/qmake -recursive
% make && sudo make install
Starting SysAdm
(For WebSockets - Required for SysAdm Client)
% sudo sysrc -f /etc/rc.conf sysadm_enable="YES"
% sudo service sysadm start
(Optional for REST)
% sudo sysrc -f /etc/rc.conf sysadm_rest_enable="YES"
% sudo service sysadm-rest start
API Documentation
Contributing new API calls
SysAdm is written using the Qt toolkit, which has excellent reference documentation.
All Qt Core classes (I.E. non-gui) can be used in SysAdm server.
Adding new API calls to the middleware is very straight-forward, simply
add a new function which accepts JSON in, and returns JSON, then connect
it to the backend.
Example:
4d3b590f46
Adding new Classes for API calls
Adding a new API class requires tweaking a few more files than a new API call only.
Example:
1ba65b3388
Testing new API calls / classes
Before committing or sending a pull request, you'll need to run our
"api-test.sh" script and confirm it works properly. To do so, first add
your new call and restart the websocket server. Next do the following:
% cd sysadm/tests
% ./api-test.sh
The api-test script will prompt you to enter username, password, and some
information about which class / API call to run. When that is done, and you
have verified the functionality of your new call you should add the output
of the test script (either from copy-n-paste, or from the file /tmp/api-response)
to your commit. (This will allow us to document the new call / class)