diff --git a/C/scripts/dispatcher_c b/C/scripts/dispatcher_c new file mode 100755 index 0000000..5500160 --- /dev/null +++ b/C/scripts/dispatcher_c @@ -0,0 +1,28 @@ +#!/bin/bash +# Run a Fledge Dispatcher service written in C/C++ +if [ "${FLEDGE_ROOT}" = "" ]; then + FLEDGE_ROOT=/usr/local/fledge +fi + +if [ ! -d "${FLEDGE_ROOT}" ]; then + logger "Fledge home directory missing or incorrectly set environment" + exit 1 +fi + +# startup with delay +delay() { + for ARG in "$@"; + do + PARAM=$(echo $ARG | cut -f1 -d=) + if [ $PARAM = '--delay' ]; then + PARAM_LENGTH=${#PARAM} + VALUE="${ARG:$PARAM_LENGTH+1}" + sleep $VALUE + break + fi + done +} + +cd "${FLEDGE_ROOT}/services" +delay "$@" +./fledge.services.dispatcher "$@" diff --git a/C/services/dispatcher/CMakeLists.txt b/C/services/dispatcher/CMakeLists.txt index 06dc642..3ac27e9 100644 --- a/C/services/dispatcher/CMakeLists.txt +++ b/C/services/dispatcher/CMakeLists.txt @@ -85,4 +85,7 @@ set(FLEDGE_INSTALL "" CACHE INTERNAL "") if (FLEDGE_INSTALL) message(STATUS "Installing ${PROJECT_NAME} in ${FLEDGE_INSTALL}/services") install(TARGETS ${EXEC} RUNTIME DESTINATION ${FLEDGE_INSTALL}/services) + # Install the dispatcher_c startup script + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/dispatcher_c DESTINATION ${FLEDGE_INSTALL}/scripts/services + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif() diff --git a/C/services/dispatcher/dispatcher.cpp b/C/services/dispatcher/dispatcher.cpp index 738c2f9..eb49a44 100644 --- a/C/services/dispatcher/dispatcher.cpp +++ b/C/services/dispatcher/dispatcher.cpp @@ -54,6 +54,14 @@ static void signalHandler(int signal) } } +// Displays service information in JSON format +static void printServiceInfoAsJSON() +{ + std::string serviceInfoJSON = R"({"name":")" + std::string(SERVICE_NAME) + R"(","description":"Service used to manage and send control information","package":"fledge-service-dispatcher","type":")" + std::string(SERVICE_TYPE) + R"(","process":"dispatcher_c","process_script":"[\"services/dispatcher_c\"]","startup_priority":20})" ; + + std::cout << serviceInfoJSON << std::endl; +} + /** * Dispatcher service main entry point */ @@ -75,6 +83,11 @@ int main(int argc, char *argv[]) for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--info")) + { + printServiceInfoAsJSON(); + return 0; + } if (!strcmp(argv[i], "-d")) { daemonMode = false; diff --git a/C/services/dispatcher/dispatcher_service.cpp b/C/services/dispatcher/dispatcher_service.cpp index 3286913..9942289 100644 --- a/C/services/dispatcher/dispatcher_service.cpp +++ b/C/services/dispatcher/dispatcher_service.cpp @@ -154,7 +154,7 @@ bool DispatcherService::start(string& coreAddress, unsigned short listenerPort = m_api->getListenerPort(); unsigned short managementListener = m_managementApi->getListenerPort(); ServiceRecord record(m_name, // Service name - "Dispatcher", // Service type + SERVICE_TYPE, // Service type "http", // Protocol "localhost", // Listening address listenerPort, // Service port