Build velia daemon

Introduce package for velia, configure build and systemd services.
Removes czechlight LEDs boot service.

Change-Id: I84d724918a3a6c7654eb113abce4d7068d7770a6
Co-authored-by: Jan Kundrát <kundrat@cesnet.cz>
diff --git a/.gitmodules b/.gitmodules
index fef9a47..b249b40 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
 [submodule "submodules/gammarus"]
 	path = submodules/gammarus
 	url = ../gammarus
+[submodule "submodules/velia"]
+	path = submodules/velia
+	url = ../velia/
diff --git a/.zuul.yaml b/.zuul.yaml
index c02b612..d5c7540 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -12,6 +12,7 @@
       - CzechLight/cla-sysrepo
       - CzechLight/gammarus
       - CzechLight/netconf-cli
+      - CzechLight/velia
       - github/CESNET/libyang
       - github/sysrepo/libredblack
       - github/sysrepo/sysrepo
diff --git a/ci/build.sh b/ci/build.sh
index 624877f..1158727 100755
--- a/ci/build.sh
+++ b/ci/build.sh
@@ -61,7 +61,7 @@
     # We don't use gating, so there's a risk that there's no prebuilt artifact, so don't die if we cannot download that file
     curl ${ARTIFACT_URL} | unzstd --stdout | tar -xf - || echo "No Buildroot prebuilt tarball found, will build from scratch"
 
-    for PROJECT in cla-sysrepo netconf-cli gammarus; do
+    for PROJECT in cla-sysrepo netconf-cli gammarus velia; do
         # If there's a change for ${PROJECT} queued ahead, ensure it gets used.
         # This means that if our submodules still pin, say, `cla-sysrepo` to some ancient version and we're testing a `netconf-cli` change,
         # then we will keep using that ancient `cla-sysrepo`. Hopefully this reduces the number of false alerts.
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index b28909b..97f6117 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -4,7 +4,7 @@
 BR2_ARM_ENABLE_VFP=y
 BR2_ARM_FPU_NEON=y
 BR2_ENABLE_DEBUG=y
-BR2_STRIP_EXCLUDE_FILES="cla-* netopeer2* sysrepo* libsysrepo* libSysrepo* libnetconf2* libyang* sysrepo-cli"
+BR2_STRIP_EXCLUDE_FILES="cla-* netopeer2* sysrepo* libsysrepo* libSysrepo* libnetconf2* libyang* sysrepo-cli veliad"
 BR2_STRIP_EXCLUDE_DIRS="/usr/lib/libyang /usr/lib/sysrepo"
 BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/patches"
 BR2_PER_PACKAGE_DIRECTORIES=y
@@ -60,7 +60,6 @@
 BR2_PACKAGE_DDRESCUE=y
 BR2_PACKAGE_RAUC=y
 BR2_PACKAGE_RAUC_NETWORK=y
-BR2_PACKAGE_SDBUS_CPP=y # TODO: remove me
 BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY=y
 BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
 # BR2_PACKAGE_SYSTEMD_HWDB is not set
@@ -105,4 +104,5 @@
 CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV="/dev/mmcblk0p3"
 CZECHLIGHT_RAUC_SLOT_B_CFG_DEV="/dev/mmcblk0p4"
 BR2_PACKAGE_GAMMARUS=y
+BR2_PACKAGE_VELIA=y
 CZECHLIGHT_NETCONF=y
diff --git a/dev-setup-git.sh b/dev-setup-git.sh
index a0e9ce8..447d48b 100755
--- a/dev-setup-git.sh
+++ b/dev-setup-git.sh
@@ -23,6 +23,7 @@
 GAMMARUS_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/gammarus
 PYBIND11_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/pybind11
 SDBUS_CPP_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/sdbus-cpp
+VELIA_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/velia
 
 define CZECHLIGHT_GIT_FIX_GITDIR
 	echo "gitdir: \$\$(git rev-parse --resolve-git-dir \$(SRCDIR)/.git)" > \$(@D)/.git
@@ -30,6 +31,7 @@
 CLA_SYSREPO_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 NETCONF_CLI_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 GAMMARUS_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
+VELIA_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 
 EOF
 
diff --git a/package/Config.in b/package/Config.in
index e0491d7..13a2666 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -4,4 +4,5 @@
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-rauc/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-separate-boot/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/gammarus/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/velia/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/grub2-tools/Config.in"
diff --git a/package/czechlight-clearfog-leds/Config.in b/package/czechlight-clearfog-leds/Config.in
index 5072348..dc19054 100644
--- a/package/czechlight-clearfog-leds/Config.in
+++ b/package/czechlight-clearfog-leds/Config.in
@@ -3,12 +3,3 @@
 	depends on BR2_INIT_SYSTEMD
 	help
 	  Userspace configuration of LEDs for indicating various states.
-
-if BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
-
-config CZECHLIGHT_CLEARFOG_LEDS_BOOT
-	bool "Indicate a successful boot via LEDs"
-	depends on CZECHLIGHT_RAUC_ROOTFS
-	default Y
-
-endif # BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
deleted file mode 100644
index 4fe8531..0000000
--- a/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Indicate a successful boot via LEDs
-Requires=multi-user.target
-After=multi-user.target
-
-[Service]
-Type=oneshot
-ExecStartPre=/bin/sh -c '[ "$(/bin/systemctl list-units --failed --all --no-legend --no-pager)" == "" ]'
-ExecStart=/bin/sh -c 'echo default-on > /sys/class/leds/status:green/trigger'
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
index cc78ebc..4ced884 100644
--- a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
@@ -1,19 +1,9 @@
-ifdef CZECHLIGHT_CLEARFOG_LEDS_BOOT
-define CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS
-        $(INSTALL) -D -m 0644 \
-                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service \
-                $(TARGET_DIR)/usr/lib/systemd/system/
-        ln -sf ../czechlight-clearfog-leds-boot.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-endef
-endif
-
 define CZECHLIGHT_CLEARFOG_LEDS_INSTALL_TARGET_CMDS
         mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
         $(INSTALL) -D -m 0644 \
                 $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service \
                 $(TARGET_DIR)/usr/lib/systemd/system/
         ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-	$(CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS)
 	cp \
 		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/clearfog-test-leds.sh \
 		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/init-leds-edfa.sh \
diff --git a/package/velia/Config.in b/package/velia/Config.in
new file mode 100644
index 0000000..5932a39
--- /dev/null
+++ b/package/velia/Config.in
@@ -0,0 +1,11 @@
+config BR2_PACKAGE_VELIA
+	bool "velia"
+	select BR2_PACKAGE_DOCOPT_CPP
+	select BR2_PACKAGE_SPDLOG
+	select BR2_PACKAGE_BOOST
+	select BR2_PACKAGE_SDBUS_CPP
+	select BR2_PACKAGE_SYSTEMD
+	help
+	  Health tracking for embedded devices running Linux
+
+	  https://gerrit.cesnet.cz/q/project:CzechLight/velia
diff --git a/package/velia/max_match_rules.conf b/package/velia/max_match_rules.conf
new file mode 100644
index 0000000..d590976
--- /dev/null
+++ b/package/velia/max_match_rules.conf
@@ -0,0 +1,3 @@
+<busconfig>
+	<limit name="max_match_rules_per_connection">4096</limit>
+</busconfig>
diff --git a/package/velia/velia.hash b/package/velia/velia.hash
new file mode 100644
index 0000000..075e53a
--- /dev/null
+++ b/package/velia/velia.hash
@@ -0,0 +1 @@
+none xxx
diff --git a/package/velia/velia.mk b/package/velia/velia.mk
new file mode 100644
index 0000000..99f5760
--- /dev/null
+++ b/package/velia/velia.mk
@@ -0,0 +1,22 @@
+VELIA_VERSION = master
+VELIA_SITE = https://gerrit.cesnet.cz/CzechLight/velia
+VELIA_SITE_METHOD = git
+VELIA_INSTALL_STAGING = NO
+VELIA_DEPENDENCIES = docopt-cpp spdlog boost sdbus-cpp systemd
+VELIA_CONF_OPTS = -DTHREADS_PTHREAD_ARG:STRING=-pthread
+VELIA_LICENSE = Apache-2.0
+VELIA_LICENSE_FILES = LICENSE.md
+
+define VELIA_INSTALL_INIT_SYSTEMD
+        mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+        $(INSTALL) -D -m 0644 \
+                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/velia/velia.service \
+                $(TARGET_DIR)/usr/lib/systemd/system/
+        ln -sf ../velia.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+
+		$(INSTALL) -D -m 0644 \
+                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/velia/max_match_rules.conf \
+                $(TARGET_DIR)/usr/share/dbus-1/system.d/
+endef
+
+$(eval $(cmake-package))
diff --git a/package/velia/velia.service b/package/velia/velia.service
new file mode 100644
index 0000000..c43724a
--- /dev/null
+++ b/package/velia/velia.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=Velia is a health tracking for embedded devices running Linux
+Requires=multi-user.target
+After=multi-user.target
+
+[Service]
+Type=simple
+ExecStartPre=/bin/sh -c 'echo 0 > /sys/class/leds/status:green/brightness'
+ExecStart=/usr/bin/veliad --input-log-level=5 --output-log-level=5 --manager-log-level=5
+PrivateTmp=yes
+PrivateDevices=no
+ProtectSystem=yes
+ProtectHome=yes
+Restart=always
+LogRateLimitIntervalSec=10
+LogRateLimitBurst=30000
+SyslogLevel=alert
+
+[Install]
+WantedBy=multi-user.target
diff --git a/submodules/velia b/submodules/velia
new file mode 160000
index 0000000..a433681
--- /dev/null
+++ b/submodules/velia
@@ -0,0 +1 @@
+Subproject commit a433681d1eda6aa66bc43ea705f6ba50dfb4459f