From 5583f4d2c00d8326b44f7d39eefd0a90276d7a74 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 13:25:56 -0500 Subject: [PATCH 1/7] Change port number to 12150 --- src/server/WebServer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/WebServer.cpp b/src/server/WebServer.cpp index 1b2e6fd..1f29c25 100644 --- a/src/server/WebServer.cpp +++ b/src/server/WebServer.cpp @@ -13,7 +13,7 @@ #define DEBUG 0 -#define PORTNUMBER 12142 +#define PORTNUMBER 12150 #define APPCAFEWORKING QString("/var/tmp/appcafe/dispatch-queue.working") @@ -172,4 +172,4 @@ void WebServer::WatcherUpdate(QString path){ if(!watcher->files().contains(path) && !watcher->directories().contains(path)){ watcher->addPath(path); //re-add it to the watcher. This happens when the file is removed/re-created instead of just overwritten } -} \ No newline at end of file +} From dcee9c38db9daf4987ca6e85620ffa033be82eec Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 14:10:03 -0500 Subject: [PATCH 2/7] Add port template for sysadm --- port-files/Makefile | 33 +++++++++++++++++++++++++++++++++ port-files/distinfo | 2 ++ port-files/pkg-descr | 3 +++ port-files/pkg-plist | 10 ++++++++++ 4 files changed, 48 insertions(+) create mode 100644 port-files/Makefile create mode 100644 port-files/distinfo create mode 100644 port-files/pkg-descr create mode 100644 port-files/pkg-plist diff --git a/port-files/Makefile b/port-files/Makefile new file mode 100644 index 0000000..e9c32d9 --- /dev/null +++ b/port-files/Makefile @@ -0,0 +1,33 @@ +# Created by: Kris Moore +# $FreeBSD$ + +PORTNAME= pcbsd-sysadm +PORTVERSION= %%CHGVERSION%% +CATEGORIES= sysutils + +MAINTAINER= kmoore@FreeBSD.org +COMMENT= PC-BSD SysAdm API server + +LICENSE= BSD3CLAUSE + +RUN_DEPENDS= sipcalc:${PORTSDIR}/net-mgmt/sipcalc \ + eject:${PORTSDIR}/sysutils/eject \ + unzip:${PORTSDIR}/archivers/unzip + +WRKSRC_SUBDIR= src +USE_QT5= core network buildtools qmake +USES= pkgconfig tar:xz qmake +MAKE_ARGS= PREFIX=${STAGEDIR}${PREFIX} + +USE_GITHUB= yes +GH_ACCOUNT= pcbsd +GH_PROJECT= sysadm +GH_TAGNAME= %%GHTAG%% + +.include + +.if ${OSVERSION} < 1000000 +IGNORE= requires FreeBSD 10 or later +.endif + +.include diff --git a/port-files/distinfo b/port-files/distinfo new file mode 100644 index 0000000..ee4e3b8 --- /dev/null +++ b/port-files/distinfo @@ -0,0 +1,2 @@ +SHA256 (pcbsd-sysadm-20151217-5583f4d2c00d8326b44f7d39eefd0a90276d7a74_GH0.tar.xz) = 00972329b84a6a4bab0c9bde2ee3f513ce7bdf9a9ef1b3b496241cd4ddf20c54 +SIZE (pcbsd-sysadm-20151217-5583f4d2c00d8326b44f7d39eefd0a90276d7a74_GH0.tar.xz) = 37757 diff --git a/port-files/pkg-descr b/port-files/pkg-descr new file mode 100644 index 0000000..0d3fd26 --- /dev/null +++ b/port-files/pkg-descr @@ -0,0 +1,3 @@ +PC-BSD SysAdm utility and websocket server + +WWW: https://github.com/pcbsd/sysadm diff --git a/port-files/pkg-plist b/port-files/pkg-plist new file mode 100644 index 0000000..06bf2a9 --- /dev/null +++ b/port-files/pkg-plist @@ -0,0 +1,10 @@ +bin/sysadm +bin/sysadm-server +include/sysadm-general.h +include/sysadm-global.h +include/sysadm-lifepreserver.h +include/sysadm-network.h +%%QT_LIBDIR%%/%%QT_LIBDIR%%sysadm.so +%%QT_LIBDIR%%/%%QT_LIBDIR%%sysadm.so.1 +%%QT_LIBDIR%%/%%QT_LIBDIR%%sysadm.so.1.0 +%%QT_LIBDIR%%/%%QT_LIBDIR%%sysadm.so.1.0.0 From 6d3a8e06b2820b1920641d4fa7020e3bfa19c9be Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 14:15:40 -0500 Subject: [PATCH 3/7] Add rc.d script --- port-files/pkg-plist | 1 + src/rc.d/pcbsd-sysadm | 41 +++++++++++++++++++++++++++++++++++++++++ src/sysadm.pro | 4 ++++ 3 files changed, 46 insertions(+) create mode 100755 src/rc.d/pcbsd-sysadm diff --git a/port-files/pkg-plist b/port-files/pkg-plist index 06bf2a9..87ca073 100644 --- a/port-files/pkg-plist +++ b/port-files/pkg-plist @@ -1,5 +1,6 @@ bin/sysadm bin/sysadm-server +etc/rc.d/sysadm include/sysadm-general.h include/sysadm-global.h include/sysadm-lifepreserver.h diff --git a/src/rc.d/pcbsd-sysadm b/src/rc.d/pcbsd-sysadm new file mode 100755 index 0000000..b7fa232 --- /dev/null +++ b/src/rc.d/pcbsd-sysadm @@ -0,0 +1,41 @@ +#!/bin/sh +# $FreeBSD$ + +# PROVIDE: sysadm +# REQUIRE: LOGIN cleanvar +# KEYWORD: shutdown + +# +# Add the following lines to /etc/rc.conf to enable sysadm: +# sysadm_enable (bool): Set to "NO" by default. +# Set it to "YES" to enable sysadm + +. /etc/rc.subr + +name="sysadm" +rcvar=sysadm_enable + +command="/usr/local/bin/syscache-server" +start_cmd="sysadm_start" +stop_cmd="sysadm_stop" + +[ -z "$sysadm_enable" ] && sysadm_enable="NO" + +load_rc_config $name + +sysadm_stop() +{ + if [ -e "/var/run/sysadm.pid" ] ; then + pkill -9 -F /var/run/sysadm.pid + fi +} + +sysadm_start() +{ + export PATH="${PATH}:/usr/local/bin:/usr/local/sbin" + sysadm_stop + echo "Starting sysadm..." + daemon -p /var/run/sysadm.pid $command $flags >/dev/null 2>/dev/null +} + +run_rc_command "$1" diff --git a/src/sysadm.pro b/src/sysadm.pro index dcf3d96..7ad5e04 100644 --- a/src/sysadm.pro +++ b/src/sysadm.pro @@ -7,3 +7,7 @@ SUBDIRS+= library binary server binary.depends = library server.depends = library +rcd.path = /usr/local/etc/rc.d/ +rcd.extra = cp rc.d/* $(INSTALL_ROOT)/usr/local/etc/rc.d/ + +INSTALLS += rcd From a0ae49496bd507b17d306ebace6691fe721f1638 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 14:19:29 -0500 Subject: [PATCH 4/7] Fix some issues compiling sysadm locally without it installed to /usr/local --- src/server/WebBackend.cpp | 6 +++--- src/server/server.pro | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 66801a5..d29ab71 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -6,8 +6,8 @@ #include //sysadm library interface classes -#include -#include +#include "sysadm-general.h" +#include "sysadm-network.h" #include "syscache-client.h" #include "dispatcher-client.h" @@ -65,4 +65,4 @@ void WebSocket::EvaluateBackendRequest(QString name, const QJsonValue args, QJso } } //end array of inputs -} \ No newline at end of file +} diff --git a/src/server/server.pro b/src/server/server.pro index 73e8b0f..46bb74e 100644 --- a/src/server/server.pro +++ b/src/server/server.pro @@ -27,7 +27,6 @@ target.path=/usr/local/bin INSTALLS += target -QMAKE_LIBDIR = /usr/local/lib/qt5 /usr/local/lib - -INCLUDEPATH += /usr/local/include -LIBS += -L../library -L/usr/local/lib -lpam -lutil -lsysadm \ No newline at end of file +QMAKE_LIBDIR = ../library /usr/local/lib/qt5 /usr/local/lib +INCLUDEPATH += ../library /usr/local/include +LIBS += -L../library -L/usr/local/lib -lpam -lutil -lsysadm From 27f37a97674f2c87198ca26afd8a731408d00a3b Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 14:21:05 -0500 Subject: [PATCH 5/7] Rename pcbsd-sysadm rc.d -> sysadm --- src/rc.d/{pcbsd-sysadm => sysadm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/rc.d/{pcbsd-sysadm => sysadm} (100%) diff --git a/src/rc.d/pcbsd-sysadm b/src/rc.d/sysadm similarity index 100% rename from src/rc.d/pcbsd-sysadm rename to src/rc.d/sysadm From e7a7ed7dbb36d583d0d00c0fea1b028956d579a6 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Thu, 17 Dec 2015 14:22:39 -0500 Subject: [PATCH 6/7] Rename syscache -> sysadm --- src/rc.d/sysadm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rc.d/sysadm b/src/rc.d/sysadm index b7fa232..9aef8b8 100755 --- a/src/rc.d/sysadm +++ b/src/rc.d/sysadm @@ -15,7 +15,7 @@ name="sysadm" rcvar=sysadm_enable -command="/usr/local/bin/syscache-server" +command="/usr/local/bin/sysadm-server" start_cmd="sysadm_start" stop_cmd="sysadm_stop" From 39f36d1d4fa5b074153583beb32d789f36f52aa4 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Thu, 17 Dec 2015 17:12:19 -0500 Subject: [PATCH 7/7] Furthur cleanup the sysadm subsystem request forwarding mechanisms so it is easier to extend later. The return/error code for each subsystem is not used yet - will finish that within the websocket later, but the general backend systems are now setup. --- src/server/WebBackend.cpp | 100 ++++++++++++++++++++++---------------- src/server/WebSocket.h | 4 +- 2 files changed, 61 insertions(+), 43 deletions(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 66801a5..b775f23 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -16,53 +16,69 @@ #define SCLISTDELIM QString("::::") //SysCache List Delimiter void WebSocket::EvaluateBackendRequest(QString name, const QJsonValue args, QJsonObject *out){ - QJsonObject obj; //output object - if(args.isObject()){ - //For the moment: all arguments are full syscache DB calls - no special ones - QStringList reqs = args.toObject().keys(); - if(!reqs.isEmpty()){ - if(DEBUG){ qDebug() << "Parsing Inputs:" << reqs; } - for(int r=0; rinsert(req, QJsonValue(values.join("")) ); } - else{ - //This is an array of outputs - QJsonArray arr; - for(int i=0; iinsert(req,arr); - } - } - } //end of special "request" objects - }else if(args.isArray()){ - QStringList inputs = JsonArrayToStringList(args.toArray()); - if(DEBUG){ qDebug() << "Parsing Array inputs:" << inputs; } - QStringList values; - if(name.toLower()=="syscache"){values = SysCacheClient::parseInputs( inputs ); } - else if(name.toLower()=="dispatcher"){values = DispatcherClient::parseInputs( inputs , AUTHSYSTEM); } - if(DEBUG){ qDebug() << " - Returns:" << values; } - for(int i=0; iinsert(inputs[i],arr); + out->insert(in_req[i],arr); }else{ - out->insert(inputs[i],values[i]); + out->insert(in_req[i],values[i]); } } - } //end array of inputs - -} \ No newline at end of file + //Return Success + return RestOutputStruct::OK; +} + +RestOutputStruct::ExitCode WebSocket::EvaluateDispatcherRequest(const QJsonValue in_args, QJSonObject *out){ + //dispatcher only needs a list of sub-commands at the moment (might change later) + QStringList in_req; + + //Parse the input arguments structure + if(args.isArray()){ in_req = JsonArrayToStringList(args.toArray()); } + else if(args.isObject()){ + QStringList keys = arg.toObject().keys(); + for(int i=0; iinsert(in_req[i],values[i]); } + //Return Success + return RestOutputStruct::OK; +} + diff --git a/src/server/WebSocket.h b/src/server/WebSocket.h index 5f37f83..1f90321 100644 --- a/src/server/WebSocket.h +++ b/src/server/WebSocket.h @@ -45,7 +45,9 @@ private: void SetOutputError(QJsonObject *ret, QString id, int err, QString msg); //Backend request/reply functions (contained in WebBackend.cpp) - void EvaluateBackendRequest(QString name, const QJsonValue in_args, QJsonObject *out); + RestOutputStruct::ExitCode EvaluateBackendRequest(QString name, const QJsonValue in_args, QJsonObject *out); + RestOutputStruct::ExitCode EvaluateSyscacheRequest(const QJsonValue in_args, QJsonObject *out); + RestOutputStruct::ExitCode EvaluateDispatcherRequest(const QJsonValue in_args, QJsonObject *out); private slots: void checkIdle(); //see if the currently-connected client is idle