Added database module with exportable functions

loop_loop_execution
Paulo Truta 2021-02-13 15:51:14 +01:00
parent 28cb163f6d
commit 375bb03dfe
6 changed files with 83 additions and 5 deletions

3
.gitignore vendored
View File

@ -18,3 +18,6 @@ main
# Build # Build
/bin /bin
# Go Sum files
*.sum

View File

@ -5,6 +5,11 @@ COMMIT := $(shell git rev-parse --short HEAD)
BUILD_DATE := $(shell date -u '+%Y-%m-%d_%H:%M:%S') BUILD_DATE := $(shell date -u '+%Y-%m-%d_%H:%M:%S')
BUILD_DIR = bin BUILD_DIR = bin
DBHOST = 127.0.0.1:3306
DBNAME = docker
DBUSER = root
DBPASS = tiger
build-all: build-all:
GOOS=linux GOARCH=amd64 make build GOOS=linux GOARCH=amd64 make build
GOOS=linux GOARCH=arm make build GOOS=linux GOARCH=arm make build
@ -14,7 +19,14 @@ build:
GOOS=${GOOS} GOARCH=${GOARCH} go build \ GOOS=${GOOS} GOARCH=${GOARCH} go build \
-trimpath -ldflags "-s -w -X ${PROJECT}/internal/diagnostics.Version=${RELEASE} \ -trimpath -ldflags "-s -w -X ${PROJECT}/internal/diagnostics.Version=${RELEASE} \
-X ${PROJECT}/internal/diagnostics.Commit=${COMMIT} \ -X ${PROJECT}/internal/diagnostics.Commit=${COMMIT} \
-X ${PROJECT}/internal/diagnostics.BuildDate=${BUILD_DATE}" \ -X ${PROJECT}/internal/diagnostics.BuildDate=${BUILD_DATE} \
-X ${PROJECT}/internal/database.Version=${RELEASE} \
-X ${PROJECT}/internal/database.Commit=${COMMIT} \
-X ${PROJECT}/internal/database.BuildDate=${BUILD_DATE} \
-X ${PROJECT}/internal/database.Dbhost=${DBHOST} \
-X ${PROJECT}/internal/database.Dbname=${DBNAME} \
-X ${PROJECT}/internal/database.Dbuser=${DBUSER} \
-X ${PROJECT}/internal/database.Dbpass=${DBPASS}" \
-o bin/sysctl-${GOOS}-${GOARCH} ${PROJECT}/cmd/sysctl -o bin/sysctl-${GOOS}-${GOARCH} ${PROJECT}/cmd/sysctl
cp ./bin/sysctl-${GOOS}-${GOARCH} ./bin/sysctl cp ./bin/sysctl-${GOOS}-${GOARCH} ./bin/sysctl

View File

@ -6,9 +6,10 @@ import (
"log" "log"
"os" "os"
"os/signal" "os/signal"
"time"
"syscall" "syscall"
"time"
"github.com/edgebox-iot/sysctl/internal/database"
"github.com/edgebox-iot/sysctl/internal/diagnostics" "github.com/edgebox-iot/sysctl/internal/diagnostics"
) )
@ -45,6 +46,11 @@ func main() {
os.Exit(1) os.Exit(1)
}() }()
printVersion()
printDbDetails()
dbQueryResult := database.PerformQuery()
log.Printf("Query result: %s", dbQueryResult)
// infinite loop // infinite loop
for { for {
@ -61,11 +67,18 @@ func appCleanup() {
func printVersion() { func printVersion() {
fmt.Printf( fmt.Printf(
"version: %s\ncommit: %s\nbuild time: %s", "\nversion: %s\ncommit: %s\nbuild time: %s\n",
diagnostics.Version, diagnostics.Commit, diagnostics.BuildDate, diagnostics.Version, diagnostics.Commit, diagnostics.BuildDate,
) )
} }
func printDbDetails() {
fmt.Printf(
"\n\nDatabase Connection Information:\nHost: %s\nuser: %s\npassword: %s\n\n",
database.Dbhost, database.Dbuser, database.Dbpass,
)
}
// IsSystemReady : Checks hability of the service to execute commands (Only after "edgebox --build" is ran at least once via SSH, or if built for distribution) // IsSystemReady : Checks hability of the service to execute commands (Only after "edgebox --build" is ran at least once via SSH, or if built for distribution)
func isSystemReady() bool { func isSystemReady() bool {
_, err := os.Stat("/home/system/components/ws") _, err := os.Stat("/home/system/components/ws")

10
go.mod
View File

@ -1,4 +1,10 @@
module github.com/edgebox-iot/sysctl module github.com/edgebox-iot/sysctl
go 1.15 go 1.15
replace github.com/edgebox-iot/sysctl/internal/database => ./internal/database
require (
github.com/edgebox-iot/sysctl/internal/database v0.0.0-00010101000000-000000000000
github.com/go-sql-driver/mysql v1.5.0 // indirect
)

View File

@ -0,0 +1,41 @@
package database
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
var Dbhost string
var Dbname string
var Dbuser string
var Dbpass string
// PerformQuery : Performs a MySQL query over the device's Edgebox API
func PerformQuery() string {
// Will try to connect to API database, which should be running locally under WS.
db, err := sql.Open("mysql", Dbuser+":"+Dbpass+"@tcp("+Dbhost+")/"+Dbname)
// if there is an error opening the connection, handle it
if err != nil {
panic(err.Error())
}
// defer the close till after the main function has finished executing
defer db.Close()
// perform a db.Query insert
insert, err := db.Query("INSERT INTO options (name, value) VALUES ( 'TEST_OPTION_SYSCTL', 'TEST' );")
// if there is an error inserting, handle it
if err != nil {
panic(err.Error())
}
// be careful deferring Queries if you are using transactions
defer insert.Close()
return "OK"
}

View File

@ -0,0 +1,3 @@
module github.com/edgebox-iot/sysctl/internal/database
go 1.15