Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
748e286
[MISC] Integrate data exporter code with OpenWrt build system
lukbaj Dec 13, 2021
8688545
[FIX] Move lib to src dir
lukbaj Dec 13, 2021
61668d6
[FIX] Build issues, add missing files
lukbaj Dec 13, 2021
852b950
[FIX] Compile zmq code when it's enabled
lukbaj Dec 13, 2021
dc5c7c3
[FIX] Formatting
lukbaj Dec 13, 2021
597e040
[SRC] Add UBUS input support
lukbaj Dec 13, 2021
8211f5c
[SRC] Add UBUS subscriber and event handler
lukbaj Dec 13, 2021
f7389da
[SRC] Resubscribe to celerway.dlb
lukbaj Dec 13, 2021
9f1547c
[SRC] Parse data from the UBUS
lukbaj Dec 13, 2021
d10fe31
[FIX] Check if metadata avilable properly
lukbaj Dec 13, 2021
a8ae8e9
[FIX] Don't log to file
lukbaj Dec 13, 2021
f36d1a5
[FIX] Quality is exported with a proper value
lukbaj Dec 14, 2021
a14c42c
[SRC] Add ugps support
lukbaj Dec 14, 2021
cbb10d8
[FIX] Export data usage properly
lukbaj Dec 14, 2021
73695cf
[FIX] Add missing event value
lukbaj Dec 14, 2021
86f350d
[FIX] Resubscribe to gps UBUS object if needed
lukbaj Dec 15, 2021
333af55
Merge pull request #2 from Celerway/for-2.7.0
lukbaj Dec 15, 2021
88dfb5f
Merge remote-tracking branch 'celerway/master' into test-merge-ubus
relet May 25, 2022
f17264b
adjust branch in Jenkinsfile
relet May 25, 2022
babeee7
adjust path in Jenkinsfile
relet May 25, 2022
b58e9b3
enable ubus in Jenkinsfile
relet May 25, 2022
01b1d8a
install ubus
relet May 25, 2022
b00f844
install ubox
relet May 25, 2022
8296b9c
restore all inputs
relet May 25, 2022
4861b95
avoid double definition of LIST_HEAD macro
relet May 25, 2022
ef75006
Update Jenkinsfile
fasolens Sep 28, 2022
ccb5400
Merge pull request #6 from fasolens/patch-1
relet Sep 28, 2022
52526a1
fix: Change to debian stretch
fasolens Sep 29, 2022
81173e8
Merge branch 'test-merge-ubus' into test-merge-ubus
fasolens Sep 29, 2022
86276a0
Merge pull request #7 from fasolens/test-merge-ubus
relet Sep 29, 2022
ba8d408
tooling
relet Sep 12, 2023
4bb4896
tooling
relet Sep 12, 2023
582b928
test: handle conn events as iface events
relet Sep 12, 2023
1ee918d
extra logging
relet Sep 12, 2023
172d3fe
fix: match interface_id / iccid
relet Sep 12, 2023
a85a5e4
delete ip cache when has_ip is false
relet Sep 12, 2023
b9df274
bump version
relet Sep 12, 2023
b550994
init as empty
relet Sep 12, 2023
33a599f
typo
relet Sep 12, 2023
00cc2d0
more tooling
relet Sep 12, 2023
1f743fe
test
relet Sep 12, 2023
1a612a8
test
relet Sep 13, 2023
e13f9b5
trigger on connectivity, not has_ip
relet Sep 13, 2023
51ceb78
trigger on connectivity, not has_ip
relet Sep 13, 2023
7fa9ebc
trigger on event_type and has_ip
relet Sep 13, 2023
ad58ae7
remove extra debugging
relet Sep 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 43 additions & 32 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import java.text.SimpleDateFormat
jobName = "metadata-exporter"
version = "0.1.66"
version = "0.1.68"
build_dir = "build"
buildPackageName = "meta-exporter"

Expand All @@ -11,7 +11,7 @@ node {
git branch: 'master', url: 'git@github.com:MONROE-PROJECT/Utilities.git'

checkout([$class: 'GitSCM',
branches: [[name: 'nne-iot']],
branches: [[name: 'test-merge-ubus']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'metadata-exporter-alt']],
submoduleCfg: [],
Expand All @@ -33,39 +33,50 @@ node {
userRemoteConfigs: [[url: 'git@github.com:Celerway/celerway-jenkins.git']]])
}

docker.withRegistry('http://registry:5000') {
docker.image('registry:5000/jenkins-slave:monroe').inside('-u jenkins') {
withDockerRegistry(credentialsId: 'gcr:nimbus-tools-gcr', url: 'http://eu.gcr.io/nimbus-tools') {
docker.image('eu.gcr.io/nimbus-tools/monroe-builder:stretch').inside('-u jenkins') {
stage ('Install libubox') {
copyArtifacts filter: '**/*.deb', fingerprintArtifacts: true, projectName: 'monroe/libubox', selector: lastSuccessful()
sh '''sudo find . -name "*.deb" -exec dpkg -i {} \\;'''
sh "rm libubox_*_amd64.deb"
}

stage ('Build') {
dir(build_dir) {
sh "cmake ../metadata-exporter-alt -DNNE=1 -DSQLITE3=1 -DZEROMQ_INPUT=1 -DZEROMQ_WRITER=1 -DZEROMQ_RELAY=1 -DGPS_NSB=1 -DMUNIN=1 -DSYSEVENT=1 -DNEAT=1 && make && make package"
}
sh "chmod +x versionize/versionize.sh; cp versionize/versionize.sh build/"
sh "chmod -R g-s ${build_dir}"
dir(build_dir) {
sh "mv meta_exporter-0.1.0-Linux.deb meta-exporter-0.1.0-Linux.deb"
sh "./versionize.sh meta-exporter-0.1.0-Linux.deb ${buildPackageName} ${version} ${shortCommit} || true"
sh "rm meta-exporter-0.1.0-Linux.deb"
}
}
stage ('Install libubus') {
step([$class: 'CopyArtifact', filter: '**/*.deb', fingerprintArtifacts: true, projectName: 'monroe/ubus', selector: [$class: 'StatusBuildSelector', stable: false]])
sh '''sudo find . -name "*.deb" -exec dpkg -i {} \\;'''
sh "rm ubusd_*_amd64.deb"
}

stage ('Configure') {
dir(build_dir) {
sh """echo `cat pk_${buildPackageName}/DEBIAN/control |grep Version|sed -e 's/Version: //'` > pkgver"""
}
sh """cp -an metadata-exporter/* build/pk_${buildPackageName}/"""
dir(build_dir) {
sh """sed -i -e 's/${buildPackageName}/metadata-exporter/g' pk_${buildPackageName}/DEBIAN/md5sums pk_${buildPackageName}/DEBIAN/control"""
sh """mkdir -p pk_${buildPackageName}/usr/sbin && mv pk_${buildPackageName}/usr/sbin/meta_exporter pk_${buildPackageName}/usr/sbin/metadata-exporter"""
sh "chmod -R g-s pk_meta-exporter"
sh '''PKGVER=`cat pkgver` ;dpkg -b pk_meta-exporter metadata-exporter-${PKGVER}-Linux.deb'''
sh "rm meta-exporter*.deb"
}
}
stage ('Build') {
dir(build_dir) {
sh "cmake ../metadata-exporter-alt/src -DNNE=1 -DSQLITE3=1 -DZEROMQ_INPUT=1 -DZEROMQ_WRITER=1 -DZEROMQ_RELAY=1 -DGPS_NSB=1 -DMUNIN=1 -DSYSEVENT=1 -DNEAT=1 -DUBUS=1 && make && make package"
}
sh "chmod +x versionize/versionize.sh; cp versionize/versionize.sh build/"
sh "chmod -R g-s ${build_dir}"
dir(build_dir) {
sh "mv meta_exporter-0.1.0-Linux.deb meta-exporter-0.1.0-Linux.deb"
sh "./versionize.sh meta-exporter-0.1.0-Linux.deb ${buildPackageName} ${version} ${shortCommit} || true"
sh "rm meta-exporter-0.1.0-Linux.deb"
}
}

stage ('Archive artifacts') {
archiveArtifacts "${build_dir}/*.deb"
}
stage ('Configure') {
dir(build_dir) {
sh """echo `cat pk_${buildPackageName}/DEBIAN/control |grep Version|sed -e 's/Version: //'` > pkgver"""
}
sh """cp -an metadata-exporter/* build/pk_${buildPackageName}/"""
dir(build_dir) {
sh """sed -i -e 's/${buildPackageName}/metadata-exporter/g' pk_${buildPackageName}/DEBIAN/md5sums pk_${buildPackageName}/DEBIAN/control"""
sh """mkdir -p pk_${buildPackageName}/usr/sbin && mv pk_${buildPackageName}/usr/sbin/meta_exporter pk_${buildPackageName}/usr/sbin/metadata-exporter"""
sh "chmod -R g-s pk_meta-exporter"
sh '''PKGVER=`cat pkgver` ;dpkg -b pk_meta-exporter metadata-exporter-${PKGVER}-Linux.deb'''
sh "rm meta-exporter*.deb"
}
}

stage ('Archive artifacts') {
archiveArtifacts "${build_dir}/*.deb"
}
}
}
}
47 changes: 47 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=data-exporter
PKG_VERSION:=2021-12-13
PKG_RELEASE=1.4

CMAKE_INSTALL:=1

PKG_LICENSE:=LGPLv2.1
PKG_LICENSE_FILES:=

PKG_MAINTAINER:=Lukasz Baj <l.baj@celerway.com>
PKG_BUILD_PARALLEL:=1

COMMIT_NO := $(shell git log --pretty=%H -1)
CMAKE_OPTIONS += -DVER=$(COMMIT_NO)

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
cp -r src/* $(PKG_BUILD_DIR)/
endef

define Package/data-exporter
SECTION:=celerway
CATEGORY:=Celerway
DEPENDS:=+libjson-c +libmnl +libsqlite3 +libpthread +libuci +libubus +libubox
TITLE:=Utility for exporting metadata
endef

TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
CMAKE_OPTIONS += -DTARGET_OWRT=1 -DSQLITE3=1 -DFILE=1 -DUBUS=1

define Package/data-exporter/install
$(INSTALL_DIR) $(1)/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/meta_exporter $(1)/bin/
$(INSTALL_BIN) ./files/metadata_exporter_timeloop.sh $(1)/bin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/metadata.init $(1)/etc/init.d/metadata
$(INSTALL_BIN) ./files/metadataloop.init $(1)/etc/init.d/metadataloop
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_BIN) ./files/metadata.config $(1)/etc/config/metadata
endef

$(eval $(call BuildPackage,data-exporter))
3 changes: 3 additions & 0 deletions files/metadata.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
config section metadata
option version '2'
option disabled '0'
113 changes: 113 additions & 0 deletions files/metadata.init
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/bin/sh /etc/rc.common

. /lib/config/uci.sh
. /usr/share/libubox/jshn.sh

START=96

METADATAPATH="/bin"
METADATANAME="meta_exporter"
METADATADB="/tmp/metadata.db"
METADATAPREFIX="/tmp/metatemp"
USAGEPREFIX="/tmp/usage"
GPSPREFIX="/tmp/metadata-gps"
CONF_PATH="/tmp/meta_exporter.conf"
SESSION_ID_PATH="/tmp/bootcnt"
TSTAMP_DUMP_PATH="/tmp/last_conn_tstamp"
USE_PROCD=1

create_config()
{
METADATANODEID=$(uci_get backend inventory id)
API_VERSION=$(uci_get backend inventory api_version)
SQLITE_INTERVAL=$(uci_get backend metadata sqlite_interval)
SQLITE_EVENTS=$(uci_get backend metadata sqlite_events)
EXPORT_GPS=$(uci_get cwy_router_settings metadata export_gps 1)
#The reason we use the default board name here, is that we need to separate between old and new Arcus. The new Arcus
#have a valid identifier stored in the DMI
BOARD_NAME=`cat /tmp/sysinfo/board_name`

if [ -z "$METADATANODEID" ]; then
METADATANODEID=0
fi

if [ -z "$API_VERSION" ];
then
API_VERSION=2
fi

json_init

#Add zmq options
json_add_object "ubus_input"
json_add_boolean "conn" 1

if [ "$EXPORT_GPS" -eq 1 ];
then
json_add_boolean "pos" 1
fi
json_close_object

json_add_object "sqlite"
json_add_string "database" "$METADATADB"
json_add_int "nodeid" "$METADATANODEID"
json_add_string "meta_prefix" "$METADATAPREFIX"
json_add_string "usage_prefix" "$USAGEPREFIX"

if [ "$EXPORT_GPS" -eq 1 ];
then
json_add_string "gps_prefix" "$GPSPREFIX"
fi

json_add_string "session_id" "$SESSION_ID_PATH"
json_add_int "api_version" "$API_VERSION"

if [ -n "$SQLITE_INTERVAL" ];
then
json_add_int "interval" "$SQLITE_INTERVAL"
fi

if [ -n "$SQLITE_EVENTS" ];
then
json_add_int "events" "$SQLITE_EVENTS"
fi

json_add_string "last_conn_tstamp_path" "$TSTAMP_DUMP_PATH"
json_add_string "output_format" "json"
json_add_string "ntp_fix_file" "/tmp/ntp-fix-obtained"

json_close_object

if [ "$EXPORT_GPS" -eq 1 ];
then
if [ "$BOARD_NAME" == "celerway-arcus" ];
then
json_add_object "gpsd"
json_add_string "address" "127.0.0.1"
json_add_string "port" "2947"
json_close_object
fi
fi

echo "$(json_dump)" > "$CONF_PATH"
}

start_service()
{
DISABLED=$(uci_get cwy_router_settings metadata disabled);

#Unless there is anywhere to store data, then don't run metadata collector.
#The reason for this check, is that we can avoid having to install metadata
#later. All we need to provide is a backend-config
if [ ! -f "/etc/config/backend" -o $DISABLED -eq 1 ];
then
exit 0;
fi

create_config

procd_open_instance
procd_set_param command "$METADATAPATH/$METADATANAME" -c "$CONF_PATH"
procd_set_param respawn 0 5 0
procd_close_instance
}
Loading