Skip to main content

IPC

note

This page is up to date as of v0.7.0, lacking documentation for IPC events.

The IPC on Windows is available via named pipes and on Linux it's available at /tmp/CoreFxPipe_{JAND_PIPE}. Messages to the daemon are sent in the following JSON format:

{"Type":"packet-type","Data":"hey"}

Note that Data must always be a string, meaning when you're sending an object you have to convert it to a string.

Libraries

You can use the unofficial Node.js library jand-ipc.

Packet Types

exit

Kills all processes and exits the daemon.

status

Gets daemon status.

Example Response
{
"Processes": 10,
"NotSaved": true,
"Directory": "/etc/jand",
"Version": "0.5.1"
}

rename-process

Rename a process.

Data

{oldName}:{newName} for example: oldTest:newTest

Response
  • ERR:already-exists
  • ERR:Process name doesn't pass verification regex.
  • done

send-process-stdin-line

Send a line to process' stdin.

Data

{ProcessName}:{text...} for example: bash:sh -c sleep 1

Response
  • done

set-enabled

Set Enabled of a process.

Data

{ProcessName}:{boolean} for example: dbus:true

Response

The boolean value that was set, True or False.

set-process-property

Data

A SetPropertyIpcPacket

Response
  • Invalid property.
  • done

get-process-info

Data

The process' name.

Response

A Proccess Info

stop-process

Kill a process.

Data

The process' name.

Response
  • already-stopped if not running
  • killed if killed succesfully.

restart-process

Restart a process.

Data

The process' name.

Response

done

new-process

Creates a new process, enables it but doesn't start it automatically.

Data

New Process object

Response
  • added
  • ERR:already-exists
  • ERR:Process name doesn't pass verification regex.

start-process

Start an already existing process.

Data

The process' name.

Response
  • ERR:already-started
  • done

save-config

Make the daemon save it's configuration.

Response

done

get-processes

Response

An array of RuntimeProcessInfo.

delete-process

Kill a process and delete it.

Response

done

subscribe-events

Subscribe to events over IPC using a bitfield of events DaemonEvents.

Data

The events you want to subscribe to represented as a number. The events will be automatically added onto your already subscribed events using a bit-wise/binary OR operation.

Response

done

unsubscribe-events

Unsubscribe from IPC events. Same as subscribe-events except it makes a XOR operation.

subscribe-outlog-event

Subscribe to stdout log events for a process.

Data

The process' name

Response

done

subscribe-errlog-event

Subscribe to stderr log events for a process.

Data

The process' name

Response

done

get-config

Get daemon configuration.

Response
{
"LogIpc": true,
"FormatConfig": true,
"MaxRestarts": 15,
"LogProcessOutput": true
}

set-config

Set daemon configuration. (to be changed)

Data

option:value

Response
  • Option not found.
  • done

flush-all-logs

Ensure all logs are written to disk. This may be redundant after version 0.6.0/commit 067c835.

Response

done

IPC Objects

ProcessInfo

{
"Name": "jand",
"Filename": "/usr/bin/jand start-daemon",
"Arguments": [],
"WorkingDirectory": "/etc/jand",
"AutoRestart": true,
"Enabled": true
}

RuntimeProcessInfo

{
"Name": "jand",
"Filename": "/usr/bin/jand start-daemon",
"Arguments": [],
"WorkingDirectory": "/home/jan/.jand",
"ProcessId": -1,
"Stopped": true,
"ExitCode": 137,
"RestartCount": 1,
"AutoRestart": true,
"Running": false
}

NewProcess

Name requirements

{
"Name": "jand",
"Filename": "/usr/bin/jand start-daemon",
"Arguments": [],
"WorkingDirectory": "/etc/jand"
}

DaemonEvents

The comments represent their name when given over IPC.

[Flags]
public enum DaemonEvents
{
// outlog
OutLog = 0b0000_0001,
// errlog
ErrLog = 0b0000_0010,
// procstop
ProcessStopped = 0b0000_0100,
// procstart
ProcessStarted = 0b0000_1000,
// procadd
ProcessAdded = 0b0001_0000,
// procdel
ProcessDeleted = 0b0010_0000,
// procren
ProcessRenamed = 0b0100_0000,
}

SetPropertyIpcPacket

Note: Data must always be a string.

{
"Process": "processName",
"Property": "Enabled",
"Data": "false"
}