diff --git a/Dockerfile b/Dockerfile index 2599724..7d19ff6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,23 +3,16 @@ # after cd ahenk-go # docker run -it -d --name CONT_NAME --mount type=bind,source=".",target=/ahenk-go/ IMAGE_NAME:VERSION "/bin/bash" - -ARG CODE_VERSION=sid -FROM debian:${CODE_VERSION} - -RUN su -c "echo 'deb http://ftp.tr.debian.org/debian sid main' >> /etc/apt/sources.list.d/sid.list" +FROM bitnami/minideb RUN apt-get update RUN apt-get upgrade -y ### INSTALL USEFUL UTILITIES ### -RUN apt-get install curl wget tree nano -y +RUN apt-get install git curl wget tree nano procps lintian -y ### INSTALL BUILD DEPENDENCIES ### -RUN apt-get install dh-golang -y -RUN apt-get install dh-make-golang -y -RUN apt-get install golang-github-sevlyar-go-daemon-dev -y -RUN apt-get install golang-golang-x-exp-dev -y +RUN apt-get install sudo dpkg-dev debhelper golang-any -y ### CONFIGURATIONS ### # Enable UTF8 Encoding diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b517440 --- /dev/null +++ b/Makefile @@ -0,0 +1,51 @@ +REPO_NAME=ahenk-go +REPO_LINK=https://git.aliberksandikci.com.tr/liderahenk/${REPO_NAME} + +DAEMON_NAME=ahenk-go +OLD_DAEMON_NAME=ahenkd-go +PYTHON_DAEMON_NAME=ahenkd + +DATA_DIR=/etc/ahenk-go/ +LIB_DIR=/usr/share/ahenk-go/ +PLUGIN_DIR=${LIB_DIR}/plugins/ +TEMP_DIR=$(mktemp -d) +MAIN_DIR=${TEMP_DIR}/${REPO_NAME}/ + +info: + @echo "Made by Aliberk Sandıkçı - 2023" + @echo "preclean: for cleaning old files, configurations" + @echo "TODO test: Test go files" + @echo "install: Build and install ahenk-go to DESTDIR" + @echo "uninstall: Uninstall ahenk-go from DESTDIR" + +preclean: + sudo rm -rf /usr/bin/$(DAEMON_NAME) + sudo rm -rf /usr/bin/${OLD_DAEMON_NAME} + sudo rm -rf /usr/bin/${PYTHON_DAEMON_NAME} + + @# TODO systemd control for both three process for docker + @# REVIEW are both killall and systemctl commands running? + @pgrep -x ${DAEMON_NAME} && (sudo killall "${DAEMON_NAME}" || sudo systemctl disable "${DAEMON_NAME}" || sudo systemctl stop "${DAEMON_NAME}") || echo "no ${DAEMON_NAME} found" + @pgrep -x ${OLD_DAEMON_NAME} && (sudo killall "${OLD_DAEMON_NAME}" || sudo systemctl disable "${OLD_DAEMON_NAME}" || sudo systemctl stop "${OLD_DAEMON_NAME}") || echo "no ${OLD_DAEMON_NAME} found" + + @# TODO + @# echo -e "Do you want to remove python implementation of ahenk if installed in system?" + @# read -rp "(Y/N) " input + + @pgrep -x ${PYTHON_DAEMON_NAME} && (sudo killall "${PYTHON_DAEMON_NAME}" || sudo systemctl disable "${PYTHON_DAEMON_NAME}" || sudo systemctl stop "${PYTHON_DAEMON_NAME}") || echo "no ${PYTHON_DAEMON_NAME} found" + + sudo systemctl daemon-reload + sudo rm -rf ${DATA_DIR} + @echo -e "PRE-CLENING DONE\n" +test: + @echo -e "Testing go files not implemented yet!" +install: + sudo go build -o ${DESTDIR}/usr/bin/${REPO_NAME} ./cmd/ahenk-go/ + @sudo mkdir -p "${DESTDIR}/${LIB_DIR}" + @sudo mkdir -p "${DESTDIR}/${PLUGIN_DIR}" + + sudo go build -buildmode=plugin -o ${DESTDIR}/${PLUGIN_DIR}/resources.so ./plugins/resources + @sudo mkdir -p "${DESTDIR}/${DATA_DIR}" + +uninstall: + @sudo rm -rf ${DESTDIR}/usr/bin/${REPO_NAME} diff --git a/README.md b/README.md index 21f5d44..e18b188 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,45 @@ # Ahenk Go -Ahenk Agent for Liderahenk Central Management System - Go Implementation +**Liderahenk** is an open source project which provides solutions to manage, monitor and audit unlimited number of different systems and users on a network. -You can find binary packages in [Releases](/releases) section or build from source code yourself. +Ahenk-go is a Linux agent written in Go which enables Lider to manage & monitor clients remotely. - +### Documentation +- See comprehensively prepared [documentation](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-docs/) +- See how to [setup development environment](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-docs/src/branch/main/dev/environment.md) + -If you do not prefer to use binary packages you can also use installation scripts -Development Dependencies -```bash - go > 1.20 - git -``` - -Install with Script -```bash -wget -qO- https://git.aliberksandikci.com.tr/liderahenk/ahenk-go/raw/branch/main/scripts/install.sh | bash -``` - -### Useful Links -| Explanation | Link | -| ----------- | ---- | -| Ahenk-go documentation | [Liderahenk/ahenk-docs](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-docs/) | -| Current Python Implementation of Ahenk | [Pardus-LiderAhenk/ahenk](https://github.com/Pardus-LiderAhenk/ahenk/) | +## Other Liderahenk Projects +- [Pardus-LiderAhenk/ahenk](https://github.com/Pardus-LiderAhenk/ahenk/): Current Python Implementation of Ahenk +- [Lider UI](https://github.com/Pardus-LiderAhenk/liderui): Lider Administration User Interface +- [Lider API](https://github.com/Pardus-LiderAhenk/liderapi): Lider API +- [Liderahenk-ansible](https://github.com/Pardus-LiderAhenk/liderahenk-ansible): Liderahenk setup with ansible +- [Ahenkdesk](https://github.com/Pardus-LiderAhenk/ahenkdesk): Ahenk User Interface +- See more in our [GitHub Page](https://github.com/Pardus-LiderAhenk) +## Changelog +- [ahenk-docs/admin/changelog](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-docs/src/branch/main/admin/changelog.md): changes between releases with easy-to-understand annotations +- [ahenk-docs/dev/changelog](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-docs/src/branch/main/dev/changelog.md): detailed development changelog, includes all issues, feature implementations, breaking changes, code comments, todo etc. - **long** +- [debian/changelog](./debian/changelog): changes between debian releases + + +## License +Liderahenk and its sub projects are licensed under the [LGPL v3](./LICENSE). + diff --git a/cmd/ahenkd-go/ahenkd-go.go b/cmd/ahenk-go/main.go similarity index 64% rename from cmd/ahenkd-go/ahenkd-go.go rename to cmd/ahenk-go/main.go index 76793d3..ac957e9 100644 --- a/cmd/ahenkd-go/ahenkd-go.go +++ b/cmd/ahenk-go/main.go @@ -1,51 +1,35 @@ package main import ( - "ahenk-go/pkg/utils" "log" "os" "syscall" + "git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/utils" + "github.com/sevlyar/go-daemon" "golang.org/x/exp/slices" ) const PidFile = "/run/ahenkd-go.pid" const ExecutablePath = "/usr/bin/ahenkd-go" -const ConfDir = "/etc/ahenk-go/" - -// FIXME there isn't any difference with Stop() function -// TODO There can be a Start() function in it but start function doesnt work properly right now -func Restart(pid, signal int) { - Stop(pid, signal) -} - -// Stop Ahenkd Daemon with a specific PID (running from second copy) -// do not forget to use also os.Exit() when using in ExecStop -func Stop(pid, signal int) { - log.Println("Stop Signal Caught") - - // FILLME what you want to do before stopping daemon? - - if err := syscall.Kill(pid, syscall.Signal(signal)); err == nil { - log.Printf("Ahenk Daemon with pid number %v Successfully stopped", pid) // TODO Also log to /etc/ahenk-go/ahenkd.log - } else { - log.Fatal(err) - } -} +const DataDir = "/etc/ahenk-go/" +const LogFile = DataDir + "ahenk.log" +const LibDir = "/usr/share/ahenk-go/" +const PluginDir = LibDir + "/plugins/" // Main Function that starts daemon and controls arguments func main() { - if len(os.Args) == 2 && slices.Contains([]string{"start", "stop", "restart", "nodaemon"}, os.Args[1]) { + if len(os.Args) == 2 && slices.Contains([]string{"start", "stop", "restart", "nodaemon", "tmptest"}, os.Args[1]) { switch os.Args[1] { case "start": - utils.CreatePath(ConfDir) + utils.CreatePath(DataDir) cntxt := &daemon.Context{ PidFileName: PidFile, PidFilePerm: 0644, - LogFileName: ConfDir + "ahenkd.log", + LogFileName: LogFile, LogFilePerm: 0640, - WorkDir: ConfDir, + WorkDir: LibDir, Umask: 027, Args: []string{ExecutablePath, "start"}, } @@ -62,18 +46,46 @@ func main() { case "stop": i, _ := daemon.ReadPidFile(PidFile) Stop(i, 15) - os.Exit(0) case "restart": i, _ := daemon.ReadPidFile(PidFile) Restart(i, 15) - os.Exit(0) case "nodaemon": log.Print("STARTED AS NO-DAEMON") + + f := utils.OpenLogFile(LogFile) + defer f.Close() + log.SetOutput(f) + case "tmptest": + log.Print("TEMPORARY TEST STARTED, log files are NOT redirecting!") } } else { - log.Print("Please enter a valid option !") + panic("Please enter a valid option !") } PluginManager() - log.Print("Plugin Manager Started Succesfully") // NEXT Make PluginManager async ! } + +// FIXME there isn't any difference with Stop() function +// TODO There can be a Start() function in it but start function doesnt work properly right now +// Restart ahenk daemon with a specific PID (running from second copy) +func Restart(pid, signal int) { + Stop(pid, signal) +} + +// Stop ahenk daemon with a specific PID (running from second copy) +func Stop(pid, signal int) { + log.Println("Stop Signal Caught") + + // FILLME what you want to do before stopping daemon? + + if err := syscall.Kill(pid, syscall.Signal(signal)); err == nil { + log.Printf("Ahenk Daemon with pid number %v Successfully stopped", pid) + f := utils.OpenLogFile(LogFile) + defer f.Close() + log.SetOutput(f) + log.Printf("Ahenk Daemon with pid number %v Successfully stopped", pid) + } else { + log.Fatal(err) + } + os.Exit(0) +} diff --git a/cmd/ahenk-go/plugin-manager.go b/cmd/ahenk-go/plugin-manager.go new file mode 100644 index 0000000..26e85c3 --- /dev/null +++ b/cmd/ahenk-go/plugin-manager.go @@ -0,0 +1,39 @@ +package main + +import ( + "fmt" + "time" +) + +// plugins/resources +type Resources interface { + AgentInfo() map[string]interface{} +} + +// type NewPluginInterface interface { +// PluginMethod() returnType +// } + +// Loads Plugins and runs them. +// When you create a new plugin create a new interface and call this plugin in this function +func PluginManager() { + var resources Resources = LoadPlugin("resources").(Resources) + // var pluginName NewPluginInterface = LoadPlugin("pluginName").(NewPluginInterface) + for { + logPlugin("AgentInfo", resources.AgentInfo()) + time.Sleep(30 * time.Second) + } +} + +// Logs plugin outputs. +func logPlugin(title string, mp map[string]interface{}) { + fmt.Printf("\n----- %v -----\n", title) + for i, v := range mp { + fmt.Printf("%v: %v\n", i, v) + } +} + +// // TODO response to Lider +// // func createResponse() { + +// // } diff --git a/cmd/ahenk-go/plugin-opener.go b/cmd/ahenk-go/plugin-opener.go new file mode 100644 index 0000000..123422f --- /dev/null +++ b/cmd/ahenk-go/plugin-opener.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "os" + "plugin" + + "git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/utils" +) + +// Load Plugin placed in PluginDir, returns empty interface. +// Do not forget to cast in plugin manager +// +// Give Plugin Name as argument and be sure you compiled plugins with `-buildmode=plugin` to PluginDir as `pluginname.so` +func LoadPlugin(plugName string) interface{} { + + // TODO if error caugth try without relative path, this will be good for local testing + plug, err := plugin.Open(PluginDir + plugName + ".so") + utils.Check(err) + + // TODO also allow lookup another symbol other than PlugnameConnect + symPlug, err := plug.Lookup(utils.FirstUpperEN(plugName) + "Connect") + utils.Check(err) + + var plugOut interface{} + plugOut, ok := symPlug.(interface{}) + if !ok { + fmt.Println("unexpected type from module symbol") + os.Exit(1) + } + return plugOut +} diff --git a/cmd/ahenkd-go/plugin-manager.go b/cmd/ahenkd-go/plugin-manager.go deleted file mode 100644 index 2b6a3d5..0000000 --- a/cmd/ahenkd-go/plugin-manager.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "ahenk-go/pkg/plugins/resources" - "fmt" - "log" - "time" -) - -func PluginManager() { - log.Print("Plugin Manager Started") - - for { - logPlugin(resources.AgentInfo()) - time.Sleep(30 * time.Second) - } - -} - -func logPlugin(mp map[string]interface{}) { - fmt.Printf("\nOs Info:\n") - for i, v := range mp { - fmt.Printf("%v: %v\n", i, v) - } -} - -// TODO response to Lider -// func createResponse() { - -// } diff --git a/debian/ahenk-go.service b/debian/ahenk-go.service index 142509a..113bd46 100644 --- a/debian/ahenk-go.service +++ b/debian/ahenk-go.service @@ -7,8 +7,8 @@ After=network.target network-online.target Type=forking User=root Group=root -ExecStart=/usr/bin/ahenkd-go start -ExecStop=/usr/bin/ahenkd-go stop +ExecStart=/usr/bin/ahenk-go start +ExecStop=/usr/bin/ahenk-go stop ExecReload=kill -HUP $MAINPID PIDFile=/run/ahenkd-go.pid Restart=always diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..7900dfa --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +ahenk-go (0.0.1-1) UNRELEASED; urgency=low + + * Initial release + + -- Aliberk Sandıkçı Mon, 21 Aug 2023 13:05:24 +0000 \ No newline at end of file diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..00727f0 --- /dev/null +++ b/debian/control @@ -0,0 +1,23 @@ +Source: ahenk-go +Maintainer: Aliberk Sandıkçı +Section: utils +Testsuite: autopkgtest-pkg-go +Priority: optional +Build-Depends: debhelper (>= 13), + debhelper-compat (= 10), +Standards-Version: 4.6.0 +Vcs-Browser: https://git.aliberksandikci.com.tr/Liderahenk/go-ahenk +Vcs-Git: https://git.aliberksandikci.com.tr/Liderahenk/go-ahenk.git +Homepage: https://liderahenk.org +Rules-Requires-Root: no +XS-Go-Import-Path: git.aliberksandikci.com.tr/Liderahenk/ahenk-go + +Package: ahenk-go +Architecture: any +Depends: ${misc:Depends}, + ${shlibs:Depends} +Built-Using: ${misc:Built-Using} +Description: The client side of the Lider Ahenk Project + Lider Ahenk is an open source project which provides solutions + to manage, monitor and audit unlimited number of different + systems and users on a network. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..6fc10e9 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,13 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: ahenk-go +Upstream-Contact: Aliberk Sandıkçı +Source: https://git.aliberksandikci.com.tr/Liderahenk/ahenk-go + +Files: * +Copyright: 2023 Aliberk Sandıkçı +License: LGPL-3.0+ + +Files: debian/* +Copyright: 2023 Aliberk Sandıkçı +License: LGPL-3.0+ +Comment: Debian packaging is licensed under the same terms as upstream diff --git a/debian/rules b/debian/rules new file mode 100644 index 0000000..b61fdd4 --- /dev/null +++ b/debian/rules @@ -0,0 +1,8 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_auto_install: + dh_auto_install + dh_installsystemd diff --git a/go.mod b/go.mod index 4875448..ce2ce06 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module ahenk-go +module git.aliberksandikci.com.tr/Liderahenk/ahenk-go go 1.20 @@ -10,6 +10,7 @@ require ( require ( github.com/go-ole/go-ole v1.2.6 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect + golang.org/x/text v0.12.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 5959980..fa11463 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,8 @@ golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/osinfo/main.go b/pkg/osinfo/main.go index 931f398..292657d 100644 --- a/pkg/osinfo/main.go +++ b/pkg/osinfo/main.go @@ -1,10 +1,11 @@ package osinfo import ( - "ahenk-go/pkg/utils" "syscall" + "git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/utils" "github.com/shirou/gopsutil/disk" + "github.com/shirou/gopsutil/mem" ) const KB = uint64(1024) @@ -35,8 +36,10 @@ func GetDisks() []disk.PartitionStat { return parts } -// return disk usage as MiB -// TODO different function for all disks / a specified disk? +// return disk usage as GiB +// +// TODO different functions for all disks / a specified disk? +// FIXME Wrong Disk values for docker !!! (probably because counting also virtual mountpoints?) func GetDiskUsage() map[string]float64 { var totalSize, freeSize, usedSize uint64 for _, part := range GetDisks() { @@ -52,3 +55,17 @@ func GetDiskUsage() map[string]float64 { "used": utils.Byte2GiB(usedSize), } } + +// return memory usage as GiB +// +// TODO also implement swap usage +func GetMemoryUsage() map[string]float64 { + v, _ := mem.VirtualMemory() + return map[string]float64{ + "total": utils.Byte2GiB(v.Total), + "free": utils.Byte2GiB(v.Free), + "used": utils.Byte2GiB(v.Used), + "avaliable": utils.Byte2GiB(v.Available), + "cached": utils.Byte2GiB(v.Cached), + } +} diff --git a/pkg/utils/main.go b/pkg/utils/main.go index 2475994..70cb632 100644 --- a/pkg/utils/main.go +++ b/pkg/utils/main.go @@ -3,6 +3,9 @@ package utils import ( "log" "os" + + "golang.org/x/text/cases" + "golang.org/x/text/language" ) func Byte2String(arr []int8) string { @@ -47,3 +50,16 @@ func Check(err error) { panic(err) } } + +func OpenLogFile(path string) *os.File { + f, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) + if err != nil { + panic(err) + } + return f +} + +// Makes first character uppercase of given English string +func FirstUpperEN(str string) string { + return cases.Title(language.English).String(str) +} // TODO cases.NoLower vs cases.Compact ! diff --git a/pkg/plugins/resources/main.go b/plugins/resources/main.go similarity index 59% rename from pkg/plugins/resources/main.go rename to plugins/resources/main.go index c7cd9b6..84bc17d 100644 --- a/pkg/plugins/resources/main.go +++ b/plugins/resources/main.go @@ -1,10 +1,16 @@ -package resources +package main import ( - "ahenk-go/pkg/osinfo" "runtime" + + "git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/osinfo" ) +type plug string + +// exported plugin Symbol +var ResourcesConnect plug + // return instant resource usage information func ResourceUsage() map[string]string { data := map[string]string{ @@ -27,28 +33,33 @@ func ResourceUsage() map[string]string { } // return general Agent information (that changes rarely) -func AgentInfo() map[string]interface{} { +func (p plug) AgentInfo() map[string]interface{} { data := map[string]interface{}{ - "System": runtime.GOOS, "Release": osinfo.GetKernelInfo()["Release"], + "System": runtime.GOOS, "Kernel": osinfo.GetKernelInfo()["Release"], + "hostname": osinfo.GetKernelInfo()["Hostname"], + "osMachine": osinfo.GetKernelInfo()["Machine"], + "diskTotal": osinfo.GetDiskUsage()["total"], + "diskUsed": osinfo.GetDiskUsage()["used"], + "diskFree": osinfo.GetDiskUsage()["free"], + "diskUsage": osinfo.GetDiskUsage()["used"] / osinfo.GetDiskUsage()["total"], + "memoryTotal": osinfo.GetMemoryUsage()["total"], + "memoryFree": osinfo.GetMemoryUsage()["free"], + "memoryAvaliable": osinfo.GetMemoryUsage()["avaliable"], + "memoryUsed": osinfo.GetMemoryUsage()["used"], + "memoryCached": osinfo.GetMemoryUsage()["cached"], + "memoryUsage": (osinfo.GetMemoryUsage()["used"] + osinfo.GetMemoryUsage()["cached"]) / osinfo.GetMemoryUsage()["total"], //REVIEW just used/total ? + + // TODO is calling all functions one by one slow downs code? + // TODO 'agentVersion': self.get_agent_version(), - "hostname": osinfo.GetKernelInfo()["Hostname"], // TODO 'ipAddresses': str(self.Hardware.Network.ip_addresses()).replace('[', '').replace(']', ''), - // "osName": osinfo.GetKernelInfo()["Sysname"], // TODO is it necessary? - // "osNodeName": osinfo.GetKernelInfo()["NodeName"],// TODO is it necessary? - // "osVersion": osinfo.GetKernelInfo()["Version"], // TODO is it necessary? - "osMachine": osinfo.GetKernelInfo()["Machine"], - // TODO get distrubition name also (pardus,arch,debian,windows10 for example ...) + // TODO get distrubition name also (pardus,arch,debian,windows10 for example ...) // TODO 'macAddresses': str(self.Hardware.Network.mac_addresses()).replace('[', '').replace(']', ''), // TODO 'hardware.systemDefinitions': self.Hardware.system_definitions(), // TODO 'hardware.monitors': self.Hardware.monitors(), // TODO 'hardware.screens': self.Hardware.screens(), // TODO 'hardware.usbDevices': self.Hardware.usb_devices(), // TODO 'hardware.printers': self.Hardware.printers(), - "diskTotal": osinfo.GetDiskUsage()["total"], - "diskUsed": osinfo.GetDiskUsage()["used"], - "diskFree": osinfo.GetDiskUsage()["free"], - // TODO "diskUsage": osinfo.GetDiskUsage()["Usage"], - // TODO 'memory': self.Hardware.Memory.total(), // TODO 'Device': device, } return data @@ -57,13 +68,9 @@ func AgentInfo() map[string]interface{} { func Info() map[string]string { inf := make(map[string]string) inf["name"] = "resources" - inf["version"] = "0.0.1" + inf["version"] = "0.0.2" inf["support"] = "debian" inf["description"] = "Resource Usage Information and Controls" inf["developer"] = "asandikci@aliberksandikci.com.tr" - - // inf["task"] = "true" - // inf["user_oriented"] = "false" - // inf["machine_oriented"] = "false" return inf } diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh deleted file mode 100644 index 3dc7bf0..0000000 --- a/scripts/docker-build.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -# see https://people.debian.org/~stapelberg/2015/07/27/dh-make-golang.html - -GIT_HOST="git.aliberksandikci.com.tr" -GIT_ORG="liderahenk" -GIT_REPO="ahenk-go" -FULL_URL="https://$GIT_HOST/$GIT_ORG/$GIT_REPO" -DEV_NAME="Aliberk Sandıkçı" -GIT_MAIL="git@aliberksandikci.com.tr" - -UPLOAD_URL="127.0.0.1" -UPLOAD_PORT="8000" - -echo "Editing git configs..." -git config --global init.defaultBranch main -git config --global user.name "$DEV_NAME" -git config --global user.email $GIT_MAIL -git config --global color.status auto -git config --global color.branch auto -git config --global color.interactive auto -git config --global color.diff auto - -mkdir /build -cd /build || exit - -if [[ "$1" != "update" ]]; then - - dh-make-golang make -allow_unknown_hoster "$GIT_HOST/$GIT_ORG/$GIT_REPO" - - if [[ ! ("$1" != "notodo" || "$2" != "notodo") ]]; then - - # TODO Add option to disable writing all these files all the time (-s --skip) - nano "itp-$GIT_REPO.txt" - sendmail -t <"itp-$GIT_REPO.txt" - - cd $GIT_REPO || exit - grep --color=always -r TODO debian - echo -e "\nThese files needs review. Starting reviewing automatically in 10sec...\n" - sleep 10 - # TODO Allow users to escape from automatic review and manually do it while in this script - - while [[ $(grep -r TODO debian | wc --lines) -ne 0 ]]; do - nano "$(grep -r TODO debian | awk '{sub(/:.*/,"")} NR==1')" - - echo "Continuing from next file..." - sleep 1 - grep --color=always -r TODO debian - sleep 5 - - # TODO Allow user to reviewing remaining files, choosing between them, optional skipping, and waiting for an answer (continue? [Y/n]) - done - echo "ALL FILES DONE" - - dh_installsystemd - echo """ -#!/usr/bin/make -f - -%: - dh \$@ --builddirectory=_build --buildsystem=golang --with=golang --with-systemd -override_dh_auto_install: - dh_auto_install -- --no-source -""" >debian/rules - sleep 5 - # FIXME Not working! - - else - cd $GIT_REPO || exit - fi -else - gbp clone "$FULL_URL" - cd $GIT_REPO || exit - git checkout debian/sid - pwd - if [[ "$1" == "nmu" ]]; then - dch --nmu - else - dch - fi - echo "Succesfully Updated deb package information" -fi - -# TODO ask user to continue - -git add debian && git commit -a -m 'Initial packaging' - -gbp buildpackage - -cd .. -lintian -- *.changes - -echo -e "SOLVE LINTIAN ERRORS / WARNINGS\nAFTER THAT, PUSH REPO" diff --git a/scripts/install.sh b/scripts/install.sh deleted file mode 100644 index 7051e3a..0000000 --- a/scripts/install.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -### Ahenk Agent Local Installation Script - -### --> Prerequisites -# git -# go 1.20+ -# systemd - -# wget -qO- https://git.aliberksandikci.com.tr/liderahenk/ahenk-go/raw/branch/main/scripts/install.sh | bash - -### --> Variable Set -REPO_NAME="ahenk-go" -REPO_LINK="https://git.aliberksandikci.com.tr/liderahenk/${REPO_NAME}" -DAEMON_NAME="ahenk-go" -CONF_DIR="/etc/ahenk-go/" -TEMP_DIR="$(mktemp -d)" -MAIN_DIR="${TEMP_DIR}/${REPO_NAME}/" -echo -e "VARIABLES SET\n" - - -### --> Pre-Cleaning -sudo rm /usr/bin/${DAEMON_NAME} -sudo killall "$DAEMON_NAME" -sudo systemctl disable "$DAEMON_NAME" -sudo systemctl stop "$DAEMON_NAME" -sudo systemctl daemon-reload -sudo rm -rf "$CONF_DIR" -sudo mkdir -p "$CONF_DIR" -echo -e "PRE-CLENING DONE\n" - - -### --> Building -cd "$TEMP_DIR" || exit -echo "$TEMP_DIR" -git clone "$REPO_LINK" -cd "$MAIN_DIR" || exit - -# cmd/ahenkd-go -cd cmd/ahenkd-go || exit -sudo go build -o "/usr/bin/ahenkd-go" - -echo -e "BUILDING DONE\n" - -### --> Configurations -sudo touch "$CONF_DIR/user.info" -sudo cat << EOF | sudo tee -a "$CONF_DIR/user.info" > /dev/null -The current working directory is: $PWD -You are logged in as $(whoami) -$HOME $USER $SUDO_USER -EOF -sudo chown root:root "$CONF_DIR/user.info" -sudo chmod 640 "$CONF_DIR/user.info" -echo -e "CONFIGURATIONS DONE\n" - -### --> Installing -if [[ $(ps -p 1 | awk 'FNR == 2 {print $4} ') == "systemd" ]] -then - sudo mv "${MAIN_DIR}build/package/deb/${DAEMON_NAME}.service" /etc/systemd/system/ -fi -sudo systemctl daemon-reload -sudo systemctl enable "$DAEMON_NAME" -sudo systemctl start "$DAEMON_NAME" -echo -e "INSTALLING DONE\n" - -### --> Post-Cleaning -sudo rm -rf "$TEMP_DIR" -echo -e "POST-CLEANING DONE\n" \ No newline at end of file diff --git a/scripts/local-build.sh b/scripts/local-build.sh deleted file mode 100644 index 9c86f61..0000000 --- a/scripts/local-build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -sudo go build -o "build/package/bin/ahenkd-go" cmd/ahenkd-go/ahenkd-go.go \ No newline at end of file diff --git a/scripts/local-install.sh b/scripts/local-install.sh deleted file mode 100644 index 17cd6e5..0000000 --- a/scripts/local-install.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -### Ahenk Agent Local Installation Script - -### --> Prerequisites -# go 1.20+ -# systemd - -# Change directory to main repo (cd ahenk-go) -# bash scripts/local-install.sh - -### --> Variable Set -REPO_NAME="ahenk-go" -DAEMON_NAME="ahenk-go" -CONF_DIR="/etc/ahenk-go/" -TEMP_DIR="$(mktemp -d)" -MAIN_DIR="${TEMP_DIR}/${REPO_NAME}/" -echo -e "VARIABLES SET\n" - - -### --> Pre-Cleaning -sudo rm /usr/bin/${DAEMON_NAME} -sudo killall "$DAEMON_NAME" -sudo systemctl disable "$DAEMON_NAME" -sudo systemctl stop "$DAEMON_NAME" -sudo systemctl daemon-reload -sudo rm -rf "$CONF_DIR" -sudo mkdir -p "$CONF_DIR" -echo -e "PRE-CLENING DONE\n" - - -### --> Building -cp -r ../ "$TEMP_DIR" -cd "$TEMP_DIR" || exit -echo "$TEMP_DIR" -cd "$MAIN_DIR" || exit - -# cmd/ahenkd-go -cd cmd/ahenkd-go || exit -sudo go build -o "/usr/bin/ahenkd-go" - -echo -e "BUILDING DONE\n" - -### --> Configurations -sudo touch "$CONF_DIR/user.info" -sudo cat << EOF | sudo tee -a "$CONF_DIR/user.info" > /dev/null -The current working directory is: $PWD -You are logged in as $(whoami) -$HOME $USER $SUDO_USER -EOF -sudo chown root:root "$CONF_DIR/user.info" -sudo chmod 640 "$CONF_DIR/user.info" -echo -e "CONFIGURATIONS DONE\n" - -### --> Installing -if [[ $(ps -p 1 | awk 'FNR == 2 {print $4} ') == "systemd" ]] -then - sudo mv "${MAIN_DIR}debian/${DAEMON_NAME}.service" /etc/systemd/system/ -fi -sudo systemctl daemon-reload -sudo systemctl enable "$DAEMON_NAME" -sudo systemctl start "$DAEMON_NAME" -echo -e "INSTALLING DONE\n" - -### --> Post-Cleaning -sudo rm -rf "$TEMP_DIR" -echo -e "POST-CLEANING DONE\n" \ No newline at end of file