WiP! RRD support
This commit is contained in:
parent
651efc1e6b
commit
8b927b8ff7
|
@ -22,6 +22,8 @@ JsonSocketTranslatorArguments = <json-socket-translator {
|
|||
socket: string
|
||||
}>.
|
||||
|
||||
RrdArguments = <rrd { dataspace: #!any }>.
|
||||
|
||||
SqliteArguments = <sqlite {
|
||||
database: string
|
||||
dataspace: #!any
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
version 1.
|
||||
|
||||
RRDaction = <rrd @verb symbol @args [string...]>.
|
|
@ -3,5 +3,5 @@
|
|||
pkgs.buildNimPackage {
|
||||
name = "dummy";
|
||||
propagatedNativeBuildInputs = [ pkgs.pkg-config ];
|
||||
propagatedBuildInputs = [ pkgs.sqlite ];
|
||||
propagatedBuildInputs = [ pkgs.rrdtool pkgs.sqlite ];
|
||||
}
|
||||
|
|
|
@ -27,6 +27,12 @@ type
|
|||
JsonSocketTranslatorArguments* {.preservesRecord: "json-socket-translator".} = object
|
||||
`field0`*: JsonSocketTranslatorArgumentsField0
|
||||
|
||||
RrdArgumentsField0* {.preservesDictionary.} = object
|
||||
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
|
||||
|
||||
RrdArguments* {.preservesRecord: "rrd".} = object
|
||||
`field0`*: RrdArgumentsField0
|
||||
|
||||
WebhooksArgumentsField0* {.preservesDictionary.} = object
|
||||
`endpoints`*: Table[seq[string], EmbeddedRef]
|
||||
`listen`*: Tcp
|
||||
|
@ -61,6 +67,7 @@ type
|
|||
proc `$`*(x: WebsocketArguments | JsonTranslatorArguments |
|
||||
JsonTranslatorConnected |
|
||||
JsonSocketTranslatorArguments |
|
||||
RrdArguments |
|
||||
WebhooksArguments |
|
||||
FileSystemUsageArguments |
|
||||
SqliteArguments |
|
||||
|
@ -71,6 +78,7 @@ proc `$`*(x: WebsocketArguments | JsonTranslatorArguments |
|
|||
proc encode*(x: WebsocketArguments | JsonTranslatorArguments |
|
||||
JsonTranslatorConnected |
|
||||
JsonSocketTranslatorArguments |
|
||||
RrdArguments |
|
||||
WebhooksArguments |
|
||||
FileSystemUsageArguments |
|
||||
SqliteArguments |
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
import
|
||||
preserves
|
||||
|
||||
type
|
||||
RRDaction* {.preservesRecord: "rrd".} = object
|
||||
`verb`*: Symbol
|
||||
`args`*: seq[string]
|
||||
|
||||
proc `$`*(x: RRDaction): string =
|
||||
`$`(toPreserves(x))
|
||||
|
||||
proc encode*(x: RRDaction): seq[byte] =
|
||||
encode(toPreserves(x))
|
|
@ -10,6 +10,7 @@ import ./syndesizer/[
|
|||
file_system_usage,
|
||||
json_socket_translator,
|
||||
json_translator,
|
||||
rrd,
|
||||
sqlite_actor,
|
||||
webhooks,
|
||||
websockets]
|
||||
|
@ -23,5 +24,7 @@ runActor("syndesizer") do (turn: var Turn; root: Cap):
|
|||
discard spawnJsonStdioTranslator(turn, root)
|
||||
discard spawnWebhookActor(turn, root)
|
||||
discard spawnWebsocketActor(turn, root)
|
||||
when withLibrrd:
|
||||
discard spawnRrdActor(turn, root)
|
||||
when withSqlite:
|
||||
discard spawnSqliteActor(turn, root)
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||
# SPDX-License-Identifier: Unlicense
|
||||
|
||||
const withLibrrd* {.booldefine.}: bool = true
|
||||
|
||||
when withLibrrd:
|
||||
import preserves, syndicate, syndicate/relays
|
||||
import ../schema/[config, rrd]
|
||||
|
||||
{.passC: staticExec("pkg-config --cflags librrd").}
|
||||
{.passL: staticExec("pkg-config --libs librrd").}
|
||||
|
||||
{.pragma: librrd, header: "rrd.h", importc.}
|
||||
|
||||
proc rrd_update(a1: cint; a2: cstringArray): cint {.librrd.}
|
||||
proc rrd_get_error(): cstring {.librrd.}
|
||||
proc rrd_clear_error() {.librrd.}
|
||||
|
||||
proc spawnRrdActor*(turn: var Turn; root: Cap): Actor {.discardable.} =
|
||||
spawn("rrd-actor", turn) do (turn: var Turn):
|
||||
during(turn, root, ?:RrdArguments) do (ds: Cap):
|
||||
let updatePattern = RRDaction ?: {0: ?Symbol"update", 1: grab()}
|
||||
onMessage(turn, ds, updatePattern) do (args: seq[string]):
|
||||
var argv = allocCStringArray(args)
|
||||
if rrd_update(args.len.cint, argv) != 0:
|
||||
stderr.writeLine(rrd_get_error())
|
||||
rrd_clear_error()
|
||||
deallocCStringArray(argv)
|
||||
|
||||
when isMainModule:
|
||||
runActor("main") do (turn: var Turn; root: Cap):
|
||||
connectStdio(turn, root)
|
||||
spawnRrdActor(turn, root)
|
Loading…
Reference in New Issue