mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
for build
This commit is contained in:
parent
c68b1c01eb
commit
16c919b1ee
23 changed files with 849 additions and 2 deletions
5
fluent-bit/Config.in
Normal file
5
fluent-bit/Config.in
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
config FLUENT_BIT_SYSLOG_PREPEND_LENGTH
|
||||
bool "Enable syslog length prefix (RFC5424)"
|
||||
default y
|
||||
help
|
||||
If enabled, prepends the byte-length of the syslog message to the message output.
|
||||
|
|
@ -33,6 +33,10 @@ define Package/fluent-bit/description
|
|||
Fluent Bit is a super fast, lightweight, and highly scalable logging and metrics processor and forwarder.
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
ifeq ($(LOCAL_DEV),1)
|
||||
define Build/Prepare
|
||||
$(CP) -rf ./fluent-bit/* $(PKG_BUILD_DIR)/
|
||||
|
|
@ -57,6 +61,12 @@ CMAKE_OPTIONS+= \
|
|||
-DFLB_WASM=No \
|
||||
-DFLB_LUAJIT=No
|
||||
|
||||
ifeq ($(CONFIG_FLUENT_BIT_SYSLOG_PREPEND_LENGTH),y)
|
||||
CMAKE_OPTIONS += -DFLUENT_BIT_SYSLOG_PREPEND_LENGTH=Yes
|
||||
else
|
||||
CMAKE_OPTIONS += -DFLUENT_BIT_SYSLOG_PREPEND_LENGTH=No
|
||||
endif
|
||||
|
||||
# In plugins
|
||||
CMAKE_OPTIONS += \
|
||||
-DFLB_IN_SYSLOG=Yes \
|
||||
|
|
@ -170,6 +180,7 @@ CMAKE_OPTIONS += \
|
|||
define Package/fluent-bit/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_DIR) $(1)/etc/fluent-bit
|
||||
$(INSTALL_DIR) $(1)/etc/fluent-bit/conf.d
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/fluent-bit $(1)/usr/sbin/
|
||||
$(INSTALL_DATA) ./files/fluent-bit.conf $(1)/etc/fluent-bit/fluent-bit.conf
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/conf/parsers.conf $(1)/etc/fluent-bit/parsers.conf
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 72b950e7b..58e76b349 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -205,6 +205,9 @@ option(FLB_CUSTOM_CALYPTIA "Enable Calyptia Support" Yes)
|
||||
# Config formats
|
||||
option(FLB_CONFIG_YAML "Enable YAML config format" Yes)
|
||||
|
||||
+# out syslog message format
|
||||
+option(FLUENT_BIT_SYSLOG_PREPEND_LENGTH "Enable prepending of length to syslog message" Yes)
|
||||
+
|
||||
# List of plugins available and defaults for each option
|
||||
include(cmake/plugins_options.cmake)
|
||||
|
||||
diff --git a/plugins/out_syslog/CMakeLists.txt b/plugins/out_syslog/CMakeLists.txt
|
||||
index 556d8e1a4..a848020e9 100644
|
||||
--- a/plugins/out_syslog/CMakeLists.txt
|
||||
+++ b/plugins/out_syslog/CMakeLists.txt
|
||||
@@ -1,3 +1,7 @@
|
||||
+if(FLUENT_BIT_SYSLOG_PREPEND_LENGTH)
|
||||
+ add_definitions(-DFLUENT_BIT_SYSLOG_PREPEND_LENGTH)
|
||||
+endif()
|
||||
+
|
||||
set(src
|
||||
syslog.c
|
||||
syslog_conf.c)
|
||||
diff --git a/plugins/out_syslog/syslog.c b/plugins/out_syslog/syslog.c
|
||||
index 4ecc7c4ac..f85c38b51 100644
|
||||
--- a/plugins/out_syslog/syslog.c
|
||||
+++ b/plugins/out_syslog/syslog.c
|
||||
@@ -156,7 +156,7 @@ static flb_sds_t syslog_rfc5424(flb_sds_t *s, struct flb_time *tms,
|
||||
return NULL;
|
||||
}
|
||||
*s = tmp;
|
||||
- return *s;
|
||||
+ goto finalize;
|
||||
}
|
||||
|
||||
prival = (msg->facility << 3) + msg->severity;
|
||||
@@ -291,6 +291,31 @@ static flb_sds_t syslog_rfc5424(flb_sds_t *s, struct flb_time *tms,
|
||||
*s = tmp;
|
||||
}
|
||||
|
||||
+finalize:
|
||||
+#ifdef FLUENT_BIT_SYSLOG_PREPEND_LENGTH
|
||||
+ // Create new SDS with length prefix
|
||||
+ // Allocate enough space for "%u "
|
||||
+ flb_sds_t prefix = flb_sds_create_size(32);
|
||||
+ if (!prefix) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ unsigned int msg_len = flb_sds_len(*s);
|
||||
+ prefix = flb_sds_printf(&prefix, "%u ", msg_len);
|
||||
+ if (!prefix) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ flb_sds_t new_s = flb_sds_cat(prefix, *s, msg_len);
|
||||
+ if (!new_s) {
|
||||
+ flb_sds_destroy(prefix);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ flb_sds_destroy(*s);
|
||||
+ *s = new_s;
|
||||
+#endif
|
||||
+
|
||||
return *s;
|
||||
}
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ define Package/$(PKG_NAME)
|
|||
+@PACKAGE_COLLECTD_ENCRYPTED_NETWORK \
|
||||
# remote syslog
|
||||
DEPENDS+= \
|
||||
+syslog-ng \
|
||||
+@FLUENT_BIT_SYSLOG_PREPEND_LENGTH \
|
||||
+@SYSLOGNG_LOGROTATE \
|
||||
|
||||
endef
|
||||
|
|
@ -44,7 +44,12 @@ endef
|
|||
Build/Compile=
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(CP) -r $(PKG_BUILD_DIR)/files/* $(1)/
|
||||
$(CP) -r ./files/common/* $(1)/
|
||||
ifneq ($(CONFIG_PACKAGE_fluent-bit),)
|
||||
$(CP) -r ./files/fluent-bit/* $(1)/
|
||||
else
|
||||
$(CP) -r ./files/syslog-ng/* $(1)/
|
||||
endif
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDJTCCAg0CAQEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCU0UxEzARBgNV
|
||||
BAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
|
||||
ZDAeFw0yMjExMjIxMjM1MDNaFw0zMjExMTkxMjM1MDNaMGwxCzAJBgNVBAYTAlVT
|
||||
MREwDwYDVQQIDAhJbnRlcm5ldDEMMAoGA1UEBwwDRFVUMQwwCgYDVQQKDAMuLi4x
|
||||
DDAKBgNVBAsMAy4uLjEMMAoGA1UEAwwDLi4uMRIwEAYJKoZIhvcNAQkBFgMuLi4w
|
||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDleMMuJ8AO1DeRmOyE2k2D
|
||||
DWUKB4yiRQhKxnRyRcF1s+mHcySS1NRlLwyZUuOFvBYHUhE3AfNMN5ywKazl4FwG
|
||||
MNtx0iUfHmHc0MQ04KZk1ifkS5WPUMksEJDQyM06ZH3gcIhGDlSkprnMsp9q5HlG
|
||||
umopBlihLTI+WM+8kliFbT7iOICDi9qRHPS+WTT/RClX12ISAejVFMFdpf8aQOGn
|
||||
klu7mcGyOBij0axcfd2QlHybvkSSksvny19I1/Be7MdtO3fxJODuUy8sHd9HqaOJ
|
||||
TbjcwWNWFJIR4+Gsz2DeqIPxpaqUjEZgJfUD5FSTOL3ZgtjMmzjYZj8IEf5BD7st
|
||||
AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAK+WvRYkkM+11ljo1pKwyTtcyz9fiQ9Z
|
||||
zGAed6UViEPhJNIchFEFukMMqNaWL3Pi0MkvkAiJvyJbGW0YiPm7r0sf2sOD4PPI
|
||||
UqDskApA9P1aL1uF/CBvP7kViVVVcNDSHq+Hc+6Jrg+Ufycq2kE9KrU/zI2Z0kEd
|
||||
70k+YNLWTZNjekXfrxlniw7ycmALJuYkw1GXSZ4pph+VXYPJ7c/sm4J3MKDXonTQ
|
||||
tEI4wTTkfOHUBDppNX/b9gw0A4jL5nAga/6Q2PPNoaTrgLZS0o03GO3HES24iHlG
|
||||
TBrIW9q2HRcDOfj5oNaoSasOyARFT0owJdcBFlzp7Pe1lMN+bRLz5h0=
|
||||
-----END CERTIFICATE-----
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDleMMuJ8AO1DeR
|
||||
mOyE2k2DDWUKB4yiRQhKxnRyRcF1s+mHcySS1NRlLwyZUuOFvBYHUhE3AfNMN5yw
|
||||
Kazl4FwGMNtx0iUfHmHc0MQ04KZk1ifkS5WPUMksEJDQyM06ZH3gcIhGDlSkprnM
|
||||
sp9q5HlGumopBlihLTI+WM+8kliFbT7iOICDi9qRHPS+WTT/RClX12ISAejVFMFd
|
||||
pf8aQOGnklu7mcGyOBij0axcfd2QlHybvkSSksvny19I1/Be7MdtO3fxJODuUy8s
|
||||
Hd9HqaOJTbjcwWNWFJIR4+Gsz2DeqIPxpaqUjEZgJfUD5FSTOL3ZgtjMmzjYZj8I
|
||||
Ef5BD7stAgMBAAECggEATmdMiOCcBnUL53tQlLPh9/0DoMGjk23yv1m/P6wFxamL
|
||||
CPSWcnS1fTzuGRTxGCiDfkzUBO9tqYT2zFnw8ToPNy5KTEF43YEL/t51q3t2Xs2t
|
||||
I5uPpj/7/EpMsIlrVaAwQhcw+H68/OTaZs5BGcymgzv+ObYpYiiHGjZOBCgchrl+
|
||||
/FyUyrS1M11VcamJ8H6GqNDEy5zvwOX3VjIwHvbONrN6zjNvMRIMzCQC59hEeBDG
|
||||
j6AYMw2/UJ4sPLpmqObnPvYO4D6qsEuKxQDGFwaPGSulOs5+OHMqTcTLRtktR5qJ
|
||||
Mjq5C2axy3TvxpbZ5Ou2jRB/zaXWNkK26UP5Iv2MAQKBgQD/4J5lcFBkrZArR5XL
|
||||
FiAfN4yfBAPcveRP7Zgqb7nlLzzouqz7vyH8Hhnk+XbA9CiKVOMc2Fbe82/exuft
|
||||
DvsoW5+Ds31SU52q5vWjtnPXeuK0kT6lm+qBbtmsFSAnfCRZUQcF8PhERLfzOEA6
|
||||
Uln0xr2EFR3D/UaBjsN3aTKMzQKBgQDllOe+QAf4CZGgCyAF1DDakuZF+iAfsCNz
|
||||
83dlb6N2ggJinOLs3ExfT0oJSUp4KPAIOQ+QgY01Itk0py2HEfYCgvXim7RrZ1P7
|
||||
5Sx++fi48ar3aqgLqg0hur0Yd1kFPjVRWj2/jM6qvLC8nEehNQH1VOh847FcwTrY
|
||||
UWWMKOnn4QKBgFnApE7Ykpp99u/3cCeIX0QT7BNrCR/Iy+jtYk6gWgh2BVts/3he
|
||||
lsEkndifWHReMEo1dGSNzgruQPNXucqBUr/ZQ56iuvbBtbBYyxjdysxuok7ME7lr
|
||||
c1prU5b04g53kRhzP49p8uufXxbFSGIsuLkPbTKDZal1keGn/hBIqh6RAoGAT9pS
|
||||
HMdSvkA9yaf09HIQqAXOWGqef8cZHbyCO+LvvUmNINWmzHH3knMWslIut8qtan7G
|
||||
XiHhhqjfWcQIPuHNaqQ4eCBmSbE/8e6NYoD5tQJB0Brl5mC4fpHgMcFZUkyH6Qr1
|
||||
TUnhnFtTMdc9xuGUE8v7rWzZBQUkvZbaNj0I1qECgYAesALh2u0r/ayEYjWAcqu8
|
||||
XXhQWRhg7fXm0cCODNeK5rhkaqxlw64hSY29tgEKPg/F66jXMDXcsvsBwnPoGN35
|
||||
lD6CQlWKR3g2LtRCAHLICQ5aODNL9B321syoIHF1Cdlw78V3uMsQ7av/IWaIX4BL
|
||||
EEWtDICxzN37PaGuYVSRSQ==
|
||||
-----END PRIVATE KEY-----
|
||||
93
iopsys-analytics/files/common/etc/collectd.conf
Normal file
93
iopsys-analytics/files/common/etc/collectd.conf
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
BaseDir "/var/lib/collectd"
|
||||
PIDFile "/var/run/collectd.pid"
|
||||
Interval 60
|
||||
ReadThreads 2
|
||||
WriteQueueLimitHigh 10000
|
||||
WriteQueueLimitLow 8000
|
||||
|
||||
LoadPlugin "load"
|
||||
LoadPlugin "network"
|
||||
LoadPlugin "memory"
|
||||
LoadPlugin "processes"
|
||||
LoadPlugin "cpu"
|
||||
LoadPlugin "exec"
|
||||
|
||||
<Plugin "network">
|
||||
<Server "analytics.iopsys.eu" "25827">
|
||||
SecurityLevel "encrypt"
|
||||
Username "iopsys"
|
||||
Password "kffJDv3CMVO9WHO4CIP8CGM3ZXN4EQv"
|
||||
</Server>
|
||||
</Plugin>
|
||||
|
||||
<Plugin "network">
|
||||
<Server "analytics.iopsys.eu" "25825">
|
||||
SecurityLevel "encrypt"
|
||||
Username "iopsys"
|
||||
Password "6rgVOHWq9BPCbZFlLVB854jD8WCv4EvK"
|
||||
</Server>
|
||||
</Plugin>
|
||||
|
||||
<Plugin "memory">
|
||||
ValuesPercentage true
|
||||
</Plugin>
|
||||
|
||||
<Plugin "processes">
|
||||
CollectFileDescriptor true
|
||||
CollectContextSwitch true
|
||||
CollectMemoryMaps true
|
||||
|
||||
ProcessMatch "mapagent_instances" "mapagent"
|
||||
ProcessMatch "wifimngr_instances" "wifimngr"
|
||||
ProcessMatch "ieee1905d_instances" "ieee1905d"
|
||||
ProcessMatch "topologyd_topologyd" "topologyd"
|
||||
ProcessMatch "uspd_instances" "uspd"
|
||||
ProcessMatch "mapcontroller_instances" "mapcontroller"
|
||||
ProcessMatch "obuspa_instances" "(.*)obuspa"
|
||||
ProcessMatch "hostapd_instances" "hostapd"
|
||||
ProcessMatch "swmodd_instances" "swmodd"
|
||||
ProcessMatch "ruleng_instances" "rulengd"
|
||||
ProcessMatch "wpa_supplicant_instances" "wpa_supplicant"
|
||||
ProcessMatch "dm_bulkdata" "bbfdmd -m bulkdata"
|
||||
ProcessMatch "dm_ddnsmngr" "bbfdmd -m ddnsmngr"
|
||||
ProcessMatch "dm_dnsmngr" "bbfdmd -m dnsmngr"
|
||||
ProcessMatch "dm_ethmngr" "bbfdmd -m ethmngr"
|
||||
ProcessMatch "dm_hostmngr" "bbfdmd -m hostmngr"
|
||||
ProcessMatch "dm_icwmp" "bbfdmd -m icwmp"
|
||||
ProcessMatch "dm_mcastmngr" "bbfdmd -m mcastmngr"
|
||||
ProcessMatch "dm_periodicstat" "bbfdmd -m periodicstats"
|
||||
ProcessMatch "dm_portmapping" "bbfdmd -m portmapping"
|
||||
ProcessMatch "dm_qosmngr" "bbfdmd -m qosmngr"
|
||||
ProcessMatch "dm_sshmngr" "bbfdmd -m sshmngr"
|
||||
ProcessMatch "dm_swmodd" "bbfdmd -m swmodd"
|
||||
ProcessMatch "dm_timemngr" "bbfdmd -m timemngr"
|
||||
ProcessMatch "dm_tr104" "bbfdmd -m tr104"
|
||||
ProcessMatch "dm_urlfilter" "bbfdmd -m urlfilter"
|
||||
ProcessMatch "dm_userinterfac" "bbfdmd -m userinterface"
|
||||
ProcessMatch "dm_usermngr" "bbfdmd -m usermngr"
|
||||
ProcessMatch "bbfdmd" "bbfdmd"
|
||||
ProcessMatch "decollector" "decollector"
|
||||
ProcessMatch "collectd" "collectd"
|
||||
ProcessMatch "uwsgi" "uwsgi"
|
||||
ProcessMatch "syslog-ng" "syslog-ng"
|
||||
ProcessMatch "mosquitto" "mosquitto"
|
||||
ProcessMatch "nginx" "nginx"
|
||||
ProcessMatch "hostmngr" "hostmngr"
|
||||
ProcessMatch "asterisk" "asterisk"
|
||||
ProcessMatch "voicemngr" "voicemngr"
|
||||
|
||||
|
||||
</Plugin>
|
||||
|
||||
<Plugin "cpu">
|
||||
ReportByState true
|
||||
ReportByCpu true
|
||||
ValuesPercentage true
|
||||
</Plugin>
|
||||
|
||||
<Plugin "exec">
|
||||
Exec "nobody" "/sbin/get-sn"
|
||||
</Plugin>
|
||||
|
||||
<Plugin "load">
|
||||
</Plugin>
|
||||
3
iopsys-analytics/files/common/etc/config/core-watcher
Normal file
3
iopsys-analytics/files/common/etc/config/core-watcher
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
config core-watcher 'globals'
|
||||
option api_key '1JH7ZKGDtJXKeLt4CfeJt4y'
|
||||
option url 'https://analytics.iopsys.eu:1337/crash_upload_file'
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"forced_inform": [
|
||||
"Device.DeviceInfo.ModelName"
|
||||
]
|
||||
}
|
||||
|
||||
38
iopsys-analytics/files/common/etc/init.d/core-watcher
Executable file
38
iopsys-analytics/files/common/etc/init.d/core-watcher
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
export USE_PROCD=1
|
||||
|
||||
export START=95
|
||||
export STOP=01
|
||||
|
||||
LOG="logger -t core-watcher[$$] -p"
|
||||
|
||||
start_service() {
|
||||
|
||||
[ -f /etc/config/core-watcher ] || {
|
||||
$LOG error "UCI config not found"
|
||||
return 1
|
||||
}
|
||||
|
||||
firmware_version=$(db get device.deviceinfo.SoftwareVersion || echo "unknown")
|
||||
product_class=$(db get device.deviceinfo.ProductClass | awk '{print tolower($0)}')
|
||||
serial=$(db get device.deviceinfo.SerialNumber || echo "unknown")
|
||||
config_load core-watcher
|
||||
|
||||
url=""
|
||||
config_get url "globals" "url"
|
||||
api_key=""
|
||||
config_get api_key "globals" "api_key"
|
||||
|
||||
if [ -z "$url" ] || [ -z "$api_key" ]; then
|
||||
$LOG error "URL or API Key not found in config"
|
||||
return 2
|
||||
fi
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param env API_KEY="$api_key" SERIAL="$serial" FIRMWARE_VERSION="$firmware_version" PRODUCT_CLASS="$product_class"
|
||||
procd_set_param command /usr/bin/core-watcher -u "$url"
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
26
iopsys-analytics/files/common/etc/init.d/ubus-monitor
Executable file
26
iopsys-analytics/files/common/etc/init.d/ubus-monitor
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=15
|
||||
STOP=20
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
start_service() {
|
||||
procd_open_instance
|
||||
|
||||
echo "Starting ubus monitor..."
|
||||
|
||||
procd_set_param respawn # Enable automatic restart on failure
|
||||
procd_set_param stdout 1 # Redirect stdout to procd
|
||||
procd_set_param stderr 1 # Redirect stderr to procd
|
||||
procd_set_param command /bin/sh "/usr/sbin/ubus-monitor"
|
||||
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
reload_service(){
|
||||
echo "Explicitly restarting service, are you sure you need this?"
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
uci set cwmp.cpe.forced_inform_json='/etc/icwmpd/force_inform.json'
|
||||
uci commit cwmp
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
set_core_unlimited() {
|
||||
prlimit --core=unlimited: -p 1
|
||||
}
|
||||
|
||||
boot_hook_add preinit_main set_core_unlimited
|
||||
11
iopsys-analytics/files/common/sbin/get-sn
Executable file
11
iopsys-analytics/files/common/sbin/get-sn
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
|
||||
INTERVAL="${COLLECTD_INTERVAL:-60}"
|
||||
|
||||
while sleep "$INTERVAL"; do
|
||||
SN=$(db get device.deviceinfo.SerialNumber)
|
||||
HOSTNAME=$(uname -n)
|
||||
FORMATTED_RESULT=$(echo "1337")
|
||||
echo "PUTVAL \"$HOSTNAME/exec-$SN/gauge-INFO\" interval=$INTERVAL N:\"$FORMATTED_RESULT\""
|
||||
|
||||
done
|
||||
150
iopsys-analytics/files/common/usr/bin/core-watcher
Executable file
150
iopsys-analytics/files/common/usr/bin/core-watcher
Executable file
|
|
@ -0,0 +1,150 @@
|
|||
#!/bin/sh
|
||||
|
||||
# shellcheck shell=busybox
|
||||
|
||||
# This shell script watches for *.core files created in
|
||||
# /tmp and uploads them
|
||||
|
||||
CORE_DIR="/tmp"
|
||||
|
||||
LOG="logger -t core-watcher[$$] -p"
|
||||
POLL_INTERVAL="5"
|
||||
|
||||
upload_file() {
|
||||
FILEPATH=$1
|
||||
$LOG info "Uploading $UPLOAD_TYPE $FILEPATH"
|
||||
|
||||
curl -s --fail -X "POST" \
|
||||
"$API_URL" \
|
||||
-H "accept: application/json" \
|
||||
-H "Content-Type: multipart/form-data" \
|
||||
-F "api_key=$API_KEY" \
|
||||
-F "dump_md5=$COREDUMP_MD5" \
|
||||
-F "device_serial=$SERIAL" \
|
||||
-F "upload_type=$UPLOAD_TYPE" \
|
||||
-F "incoming_file=@$FILEPATH;type=text/plain"
|
||||
|
||||
status=$?
|
||||
|
||||
if [ "$status" != "0" ]; then
|
||||
$LOG error "$UPLOAD_TYPE upload failed. curl returned status $status"
|
||||
else
|
||||
$LOG info "$UPLOAD_TYPE upload success"
|
||||
if [ $UPLOAD_TYPE = "core" ]; then
|
||||
$LOG info "Renaming core $ORIGINAL_CORE_FILEPATH"
|
||||
mv "$ORIGINAL_CORE_FILEPATH" "$ORIGINAL_CORE_FILEPATH"_UPLOADED
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<EOM
|
||||
Usage:
|
||||
$0 [OPTIONS]
|
||||
Options:
|
||||
-h help
|
||||
-u <URL> API Gateway URL (required)
|
||||
EOM
|
||||
exit 1
|
||||
}
|
||||
|
||||
main() {
|
||||
if [ -z "$API_KEY" ]; then
|
||||
$LOG error "API_KEY env variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SERIAL" ]; then
|
||||
$LOG error "SERIAL env variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$FIRMWARE_VERSION" ]; then
|
||||
$LOG error "FIRMWARE_VERSION env variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while getopts "u:" opt; do
|
||||
case $opt in
|
||||
u)
|
||||
API_URL=${OPTARG}
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$API_URL" ]; then
|
||||
usage
|
||||
fi
|
||||
# Source system information from /etc/os-release
|
||||
. /etc/os-release
|
||||
|
||||
# Convert OPENWRT_DEVICE_PRODUCT to uppercase and use it as the board name
|
||||
BOARD_NAME=$(echo "$OPENWRT_DEVICE_PRODUCT" | tr 'a-z' 'A-Z')
|
||||
BASE_MAC="$(db get device.deviceinfo.BaseMACAddress)"
|
||||
|
||||
while true; do
|
||||
if ping -c1 -4 analytics.iopsys.eu; then
|
||||
CORES=$(find "$CORE_DIR" -type f -name "*.core")
|
||||
for core in $CORES; do
|
||||
$LOG error "Core found: $core"
|
||||
|
||||
COREDUMP_MD5="$(md5sum "$core" | cut -f1 -d' ')"
|
||||
|
||||
UPLOAD_TYPE="file"
|
||||
|
||||
if [ -e /tmp/ctfw.meta ]; then
|
||||
. /tmp/ctfw.meta
|
||||
fi
|
||||
|
||||
echo "$CTFW_TEST_CASE" > /tmp/ctfw-test-case.txt
|
||||
upload_file "/tmp/ctfw-test-case.txt"
|
||||
|
||||
echo "$CTFW_TAG" > /tmp/ctfw-job-tag.txt
|
||||
upload_file "/tmp/ctfw-job-tag.txt"
|
||||
|
||||
echo "$CTFW_LOCK_USERNAME" > /tmp/ctfw-lock-username.txt
|
||||
upload_file "/tmp/ctfw-lock-username.txt"
|
||||
|
||||
opkg list > /tmp/opkg-list.txt
|
||||
upload_file "/tmp/opkg-list.txt"
|
||||
|
||||
free > /tmp/free-mem.txt
|
||||
upload_file "/tmp/free-mem.txt"
|
||||
|
||||
cat /proc/slabinfo > /tmp/slabinfo.txt
|
||||
upload_file "/tmp/slabinfo.txt"
|
||||
|
||||
echo "$BOARD_NAME" > /tmp/board-name.txt
|
||||
upload_file "/tmp/board-name.txt"
|
||||
|
||||
echo "$BASE_MAC" > /tmp/base-mac.txt
|
||||
upload_file "/tmp/base-mac.txt"
|
||||
|
||||
uname -n > /tmp/hostname.txt
|
||||
upload_file "/tmp/hostname.txt"
|
||||
|
||||
echo "$FIRMWARE_VERSION" > /tmp/fw-version.txt
|
||||
upload_file "/tmp/fw-version.txt"
|
||||
|
||||
cp "$(strings "$core" | grep ^/ | head -1 | cut -d' ' -f1)" /tmp/binary
|
||||
upload_file /tmp/binary
|
||||
|
||||
UPLOAD_TYPE="core"
|
||||
ORIGINAL_CORE_FILEPATH="$core"
|
||||
cp "$core" /tmp/core
|
||||
upload_file /tmp/core
|
||||
rm /tmp/core
|
||||
done
|
||||
fi
|
||||
|
||||
sleep $POLL_INTERVAL
|
||||
done
|
||||
|
||||
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
231
iopsys-analytics/files/common/usr/sbin/system-report
Executable file
231
iopsys-analytics/files/common/usr/sbin/system-report
Executable file
|
|
@ -0,0 +1,231 @@
|
|||
#!/bin/sh
|
||||
# shellcheck shell=dash
|
||||
|
||||
# Location of system report temporary directory
|
||||
SRDIR="/tmp/system-report"
|
||||
|
||||
|
||||
configure() {
|
||||
local preconf_path
|
||||
preconf_path="$(realpath "$0")"
|
||||
|
||||
if ! cmp -s /usr/sbin/system-report "${preconf_path}" >/dev/null; then
|
||||
echo "iopsys-test system-report differs from included with firmware, symlinking"
|
||||
ln -sf "${preconf_path}" /usr/sbin/system-report
|
||||
fi
|
||||
|
||||
if ! cmp -s /rom/usr/sbin/system-report /usr/sbin/system-report >/dev/null && ! grep -Fq "/usr/sbin/system-report" /etc/sysupgrade.conf; then
|
||||
echo "iopsys-test system-report differs from included with firmware, adding to sysupgrade.conf"
|
||||
echo "/usr/sbin/system-report" >>/etc/sysupgrade.conf
|
||||
fi
|
||||
}
|
||||
|
||||
run() {
|
||||
set -x
|
||||
|
||||
# Alias ubus to have a smaller 5-second timeout on all subsequent calls
|
||||
ubus() { command ubus -t 5 "$@"; }
|
||||
|
||||
mkdir -p "$SRDIR"
|
||||
|
||||
SRCF="$SRDIR/config"
|
||||
SRSY="$SRDIR/system"
|
||||
SRNT="$SRDIR/network"
|
||||
SRTR="$SRDIR/tr069"
|
||||
SRMD="$SRDIR/mem_dump"
|
||||
|
||||
# Config
|
||||
echo "Gathering configuration data"
|
||||
{
|
||||
cat /etc/banner
|
||||
|
||||
echo "Installed Packages"
|
||||
opkg list-installed
|
||||
|
||||
echo "Database"
|
||||
db show
|
||||
|
||||
echo "Configuration"
|
||||
uci show
|
||||
} > "$SRCF"
|
||||
|
||||
# System
|
||||
echo "Gathering system information"
|
||||
{
|
||||
echo "System Info"
|
||||
ubus call system info
|
||||
|
||||
echo "Board Info"
|
||||
ubus call system board
|
||||
|
||||
echo "Running Processes"
|
||||
top -b -n 1
|
||||
|
||||
echo "Kernel Parameters"
|
||||
sysctl -A 2>/dev/null
|
||||
|
||||
echo "System Log"
|
||||
timeout 5 logread -l 1000
|
||||
|
||||
echo "Driver Message"
|
||||
timeout 5 dmesg
|
||||
|
||||
echo "PCI Devices"
|
||||
lspci -k
|
||||
|
||||
echo "Installed Modules"
|
||||
lsmod
|
||||
|
||||
echo "CPU Info"
|
||||
cat /proc/cpuinfo
|
||||
|
||||
echo "Memory Info"
|
||||
cat /proc/meminfo
|
||||
|
||||
echo "Slab Info"
|
||||
cat /proc/slabinfo
|
||||
|
||||
echo "Firmware banks"
|
||||
ubus call fwbank dump
|
||||
} > "$SRSY"
|
||||
|
||||
# Network
|
||||
echo "Gathering network state"
|
||||
{
|
||||
echo "Device Status"
|
||||
ubus call network.device status
|
||||
|
||||
echo "Hosts Status"
|
||||
ubus call hosts show
|
||||
|
||||
echo "Topology"
|
||||
ubus call ieee1905.topology dump
|
||||
|
||||
echo "Network Status"
|
||||
ubus call network.interface dump
|
||||
|
||||
if [ -d /sys/class/ieee80211 ]; then
|
||||
echo "Wireless Status"
|
||||
ubus call network.wireless status
|
||||
|
||||
echo "Wireless Radio Status"
|
||||
ubus call wifi status
|
||||
|
||||
echo "Get radio scan"
|
||||
for radio_if in $(ubus list 'wifi.radio.*'); do
|
||||
ubus call "${radio_if}" scan
|
||||
sleep 2
|
||||
ubus call "${radio_if}" scanresults
|
||||
done
|
||||
|
||||
echo "Get Assoc List"
|
||||
interfaces=$(uci show wireless | grep "ifname=" | awk -F'[.,=]' '{print$2}')
|
||||
for int in $interfaces; do
|
||||
mode=$(uci get "wireless.${int}.mode")
|
||||
if [ "$mode" = "ap" ] ; then
|
||||
ap_int=$(uci get "wireless.${int}.ifname")
|
||||
echo "Get assoc list"
|
||||
ubus call "wifi.ap.${ap_int}" assoclist
|
||||
echo "Get station info"
|
||||
ubus call "wifi.ap.${ap_int}" stations
|
||||
fi
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
if [ "$(db get hw.board.hasVoice)" = 1 ]; then
|
||||
echo "voice status"
|
||||
ubus call voice.asterisk status
|
||||
fi
|
||||
|
||||
echo "IPv4 Routes"
|
||||
ip -d r
|
||||
|
||||
echo "IPv6 Routes"
|
||||
ip -d -6 r
|
||||
|
||||
echo "Neighbor Table"
|
||||
ip n
|
||||
|
||||
echo "ARP Table"
|
||||
cat /proc/net/arp
|
||||
|
||||
echo "IGMP Snooping Table"
|
||||
ubus call mcast stats
|
||||
|
||||
echo "Conntrack Table"
|
||||
cat /proc/net/nf_conntrack
|
||||
|
||||
echo "Network Interface Status"
|
||||
ip -d a
|
||||
|
||||
echo "IPv4 Firewall Status"
|
||||
iptables -xvnL
|
||||
|
||||
echo "IPv6 Firewall Status"
|
||||
ip6tables -xvnL
|
||||
|
||||
echo "Bridge Info"
|
||||
brctl show
|
||||
|
||||
if [ -f /tmp/multiap.backhaul ]; then
|
||||
echo "Multi-AP Backhaul status"
|
||||
cat /tmp/multiap.backhaul
|
||||
fi
|
||||
|
||||
echo "TCP/UDP listened ports"
|
||||
netstat -tlnp
|
||||
netstat -ulnp
|
||||
|
||||
echo "MAC layer firewall status"
|
||||
ebtables -t broute -L
|
||||
|
||||
echo "MAC layer firewall status list"
|
||||
ebtables -L
|
||||
|
||||
echo "IEEE1905 info"
|
||||
ubus call ieee1905 info
|
||||
|
||||
if [ -f /usr/bin/iwinfo ]; then
|
||||
echo "iwinfo interface details"
|
||||
/usr/bin/iwinfo
|
||||
fi
|
||||
|
||||
} > "$SRNT"
|
||||
|
||||
# TR-069
|
||||
echo "Gathering TR-069 state"
|
||||
{
|
||||
echo "TR-069 status"
|
||||
ubus call tr069 status
|
||||
|
||||
echo "get all TR-181 Parameters"
|
||||
ubus call bbfdm get '{"path":"Device."}'
|
||||
|
||||
echo "TR-069 Option 43 URL"
|
||||
uci -P /var/state -q get cwmp.acs.url
|
||||
|
||||
echo "TR-069 Logs"
|
||||
[ -f /var/log/icwmp ] && cat /var/log/icwmp
|
||||
} > "$SRTR"
|
||||
|
||||
# Firmware RAM dump (IOP-8118)
|
||||
if [ -f /tmp/mem_dump ]; then
|
||||
mv /tmp/mem_dump "$SRMD"
|
||||
fi
|
||||
|
||||
REPORT_PATH="$(dirname "${SRDIR}")"
|
||||
REPORT_DIRNAME="$(basename "${SRDIR}")"
|
||||
FILENAME="${REPORT_PATH}/system-report-$(date +%Y-%m-%d).tar.gz"
|
||||
tar -cz -C "${REPORT_PATH}" -f "${FILENAME}" "${REPORT_DIRNAME}"
|
||||
echo "Report is located at ${FILENAME}"
|
||||
|
||||
#ubus send "system-report" "{ \"filename\" : \"$FILENAME\" }"
|
||||
|
||||
rm -r "$SRDIR"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
configure) configure ;;
|
||||
*) run ;;
|
||||
esac
|
||||
7
iopsys-analytics/files/common/usr/sbin/ubus-monitor
Executable file
7
iopsys-analytics/files/common/usr/sbin/ubus-monitor
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/ash
|
||||
|
||||
rm -f /tmp/ubus-calls-pipe
|
||||
|
||||
mkfifo /tmp/ubus-calls-pipe || echo "Pipe wasn't created" >&2
|
||||
logger -t ubus-logging "Pipe created sucessfully"
|
||||
/bin/ubus listen > /tmp/ubus-calls-pipe
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
[INPUT]
|
||||
name syslog
|
||||
tag logs
|
||||
path /dev/log
|
||||
parser syslog-rfc3164-local
|
||||
|
||||
[INPUT]
|
||||
Name head
|
||||
Tag ubus_listen
|
||||
file /tmp/ubus-calls-pipe
|
||||
Interval_Sec 1
|
||||
|
||||
[OUTPUT]
|
||||
name syslog
|
||||
match logs
|
||||
host analytics.iopsys.eu
|
||||
port 6514
|
||||
mode tcp
|
||||
tls on
|
||||
tls.verify off
|
||||
tls.key_file /etc/analytics-cert/clientkey.pem
|
||||
tls.crt_file /etc/analytics-cert/clientcert.pem
|
||||
syslog_format rfc5424
|
||||
syslog_appname_preset dummy
|
||||
syslog_message_key message
|
||||
syslog_hostname_key hostname
|
||||
syslog_hostname_preset dummy
|
||||
|
||||
[OUTPUT]
|
||||
name syslog
|
||||
match ubus_listen
|
||||
host analytics.iopsys.eu
|
||||
port 6515
|
||||
mode tcp
|
||||
tls on
|
||||
tls.verify off
|
||||
tls.key_file /etc/analytics-cert/clientkey.pem
|
||||
tls.crt_file /etc/analytics-cert/clientcert.pem
|
||||
syslog_format rfc5424
|
||||
syslog_appname_preset dummy
|
||||
syslog_message_key head
|
||||
syslog_hostname_preset dummy
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Check if fluent-bit is installed
|
||||
if command -v fluent-bit >/dev/null 2>&1; then
|
||||
conf_file="/etc/fluent-bit/conf.d/analytics.conf"
|
||||
|
||||
# Check if the configuration file exists
|
||||
if [ -f "$conf_file" ]; then
|
||||
# Get hostname and serial number
|
||||
hostname="$(db -q get device.deviceinfo.ModelName)"
|
||||
serialnum="$(db -q get device.deviceinfo.SerialNumber)"
|
||||
|
||||
# Replace syslog_hostname_preset line
|
||||
sed -i "s/^.*syslog_hostname_preset.*/ syslog_hostname_preset ${hostname}/" "$conf_file"
|
||||
|
||||
# Replace syslog_appname_preset line
|
||||
sed -i "s/^.*syslog_appname_preset.*/ syslog_appname_preset ${serialnum}/" "$conf_file"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clear logs periodically
|
||||
grep -q 'logrotate' /etc/crontabs/root || echo '*/15 * * * * /usr/sbin/logrotate /etc/logrotate.conf' >> /etc/crontabs/root
|
||||
|
||||
# Exit successfully
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
/var/log/messages {
|
||||
missingok
|
||||
rotate 1
|
||||
size 1M
|
||||
postrotate
|
||||
/usr/sbin/syslog-ng-ctl reopen
|
||||
endscript
|
||||
}
|
||||
46
iopsys-analytics/files/syslog-ng/etc/syslog-ng.d/analytics
Normal file
46
iopsys-analytics/files/syslog-ng/etc/syslog-ng.d/analytics
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
source s_file {
|
||||
file("/var/log/messages" program_override("`ENV_VAR_SYSLOG_NG_DUT_SERIAL_NUMBER`"));
|
||||
};
|
||||
|
||||
source ubus_calls {
|
||||
pipe("/tmp/ubus-calls-pipe"
|
||||
flags(no-parse)
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
destination d_tls_syslog {
|
||||
syslog(
|
||||
"analytics.iopsys.eu"
|
||||
transport("tls")
|
||||
port(6514)
|
||||
tls(
|
||||
key-file("/etc/analytics-cert/clientkey.pem")
|
||||
cert-file("/etc/analytics-cert/clientcert.pem")
|
||||
peer-verify(no)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
destination d_tls_ubus {
|
||||
syslog(
|
||||
"analytics.iopsys.eu"
|
||||
transport("tls")
|
||||
port(6515)
|
||||
tls(
|
||||
key-file("/etc/analytics-cert/clientkey.pem")
|
||||
cert-file("/etc/analytics-cert/clientcert.pem")
|
||||
peer-verify(no)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
log {
|
||||
source(s_file);
|
||||
destination(d_tls_syslog);
|
||||
};
|
||||
|
||||
log {
|
||||
source(ubus_calls);
|
||||
destination(d_tls_ubus);
|
||||
};
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
sed -i '/procd_open_instance.*/a \\tprocd_set_param env ENV_VAR_SYSLOG_NG_DUT_SERIAL_NUMBER="$(db get hw.board.serial_number)"' /etc/init.d/syslog-ng
|
||||
|
||||
# Clear logs periodically
|
||||
grep -q 'logrotate' /etc/crontabs/root || echo '*/15 * * * * /usr/sbin/logrotate /etc/logrotate.conf' >> /etc/crontabs/root
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
CONF_FILE=/etc/fluent-bit/fluent-bit.conf
|
||||
TMP_CONF_FILE=/tmp/fluent-bit/fluent-bit.conf
|
||||
CONF_DIR=/etc/fluent-bit/conf.d
|
||||
|
||||
append_conf() {
|
||||
echo "$*" >> ${TMP_CONF_FILE}
|
||||
|
|
@ -14,6 +15,14 @@ create_config_file() {
|
|||
mkdir -p /tmp/fluent-bit
|
||||
rm -f ${TMP_CONF_FILE}
|
||||
touch ${TMP_CONF_FILE}
|
||||
# include all files placed in analytics directory
|
||||
# fluent-bit does not support using directory in include directive
|
||||
# also, if no file is found then fluent-bit aborts
|
||||
# so only add include if any file is present in the CONF_DIR
|
||||
if [ -d "$CONF_DIR" ] && [ "$(ls -A "$CONF_DIR")" ]; then
|
||||
echo "@INCLUDE ${CONF_DIR}/*" >> ${TMP_CONF_FILE}
|
||||
fi
|
||||
echo "" >> ${TMP_CONF_FILE}
|
||||
}
|
||||
|
||||
create_service_section() {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue