diff --git a/.ci/.golangci-master.yml b/.ci/.golangci-master.yml new file mode 100644 index 0000000000000000000000000000000000000000..1a21937d63f0d30e5daf6bf57d4f35763bf42da4 --- /dev/null +++ b/.ci/.golangci-master.yml @@ -0,0 +1,23 @@ +run: + timeout: 5m + issues-exit-code: 1 +output: + format: code-climate + print-issued-lines: true + print-linter-name: true + uniq-by-line: true + path-prefix: "" +linters-settings: + gocyclo: + min-complexity: 15 + golint: + min-confidence: 0.8 +linters: + disable-all: true + enable: + - gofmt + - golint + - gocyclo + - govet +issues: + exclude-use-default: false diff --git a/.ci/.golangci.yml b/.ci/.golangci.yml new file mode 100644 index 0000000000000000000000000000000000000000..5c4c88e8338b257ad41a8b594d2aae8a27f82f2a --- /dev/null +++ b/.ci/.golangci.yml @@ -0,0 +1,21 @@ +run: + timeout: 5m + issues-exit-code: 1 +output: + format: code-climate + print-issued-lines: true + print-linter-name: true + uniq-by-line: true + path-prefix: "" +linters-settings: + gocyclo: + min-complexity: 15 + golint: + min-confidence: 0.8 +linters: + disable-all: true + enable: + - gofmt + - golint + - gocyclo + - govet diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e896eedf2d1f44497013bef3fb944427d4a4364b..acbe3bcc482ea40ddc2d509f298a7b3ffade585d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,42 @@ +stages: + - test + +code-quality-master: + image: golangci/golangci-lint:latest-alpine + tags: + - docker + stage: test + only: + - merge_requests + except: + variables: + - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master" + script: + - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de" + # writes golangci-lint output to gl-code-quality-report.json + - golangci-lint run --config .ci/.golangci-master.yml | tee gl-code-quality-report.json + artifacts: + reports: + codequality: gl-code-quality-report.json + + +code-quality: + image: golangci/golangci-lint:latest-alpine + tags: + - docker + stage: test + only: + - merge_requests + except: + variables: + - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" + script: + - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de" + # writes golangci-lint output to gl-code-quality-report.json + - golangci-lint run --config .ci/.golangci.yml | tee gl-code-quality-report.json + artifacts: + reports: + codequality: gl-code-quality-report.json Documentation: image: @@ -13,4 +52,4 @@ Documentation: - pandoc --filter pandoc-citeproc --bibliography=bibliography.bib --csl=acm-sig-proceedings.csl --variable papersize=a4paper -s *.md -o documentation.pdf artifacts: paths: - - documentation/design/documentation.pdf \ No newline at end of file + - documentation/design/documentation.pdf diff --git a/database/database.go b/database/database.go index caefc09743776dcf6b5b3c07a5d062afa6f466f7..31b0312727c77e6abd3cd234b03435f3b1dd2d1d 100644 --- a/database/database.go +++ b/database/database.go @@ -35,7 +35,9 @@ func createDriver(uri, username, password string, encrypted bool) neo4j.Driver { }, ) - logError("failed creating database Driver", err) + if err != nil { + log.Info("failed creating database Driver:", err) + } return driver } @@ -45,7 +47,9 @@ func createSession(driver neo4j.Driver) neo4j.Session { sessionConfig := neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite} session, err := driver.NewSession(sessionConfig) - logError("failed creating database session", err) + if err != nil { + log.Info("failed creating database session:", err) + } return session } @@ -71,7 +75,9 @@ func (d Database) StoreNodes(json string) { "stringToAdd": json, }) - logError("failed storing Nodes into database", err) + if err != nil { + log.Info("failed storing Nodes into database:", err) + } log.Info("successfully added Nodes into database") } @@ -96,7 +102,9 @@ func (d Database) StoreNodeEdgePoints(json string) { "stringToAdd": json, }) - logError("failed storing NodeEdgePoints into database", err) + if err != nil { + log.Info("failed storing NodeEdgePoints into database:", err) + } setNodeNodeEdgePointsRelation(session) @@ -104,7 +112,7 @@ func (d Database) StoreNodeEdgePoints(json string) { } -func (d Database) StoreConnections(json string){} +func (d Database) StoreConnections(json string) {} //setNodeNodeEdgePointsRelation creates the database relations between "nodes" and "node edge points" func setNodeNodeEdgePointsRelation(session neo4j.Session) { @@ -118,14 +126,13 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) { _, err := session.Run( query, map[string]interface{}{}) - logError("failed storing NodeNodeEdgePointsRelation into database", err) + if err != nil { + log.Info("failed storing NodeNodeEdgePointsRelation into database:", err) + } log.Info("successfully stored NodeNodeEdgePointsRelation into database") } //logError logs error with custom and error message func logError(message string, err error) { - if err != nil { - log.Info("%v: %v", message, err) - } } diff --git a/go.mod b/go.mod index 3f041eb5b6bf48dc5efff1d244a67fd6f95418ae..eb95a65a8340c359295c54d4030bb21ad018440c 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/neo4j/neo4j-go-driver v1.8.3 github.com/rivo/tview v0.0.0-20200915114512-42866ecf6ca6 golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect - golang.org/x/tools v0.0.0-20190617190820-da514acc4774 google.golang.org/genproto v0.0.0-20200519141106-08726f379972 // indirect google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.23.0 diff --git a/gosdn-cli/gosdn-cli.go b/gosdn-cli/gosdn-cli.go index 0716fc26b4e912a23e14342db6d58566be11908d..daf42cfe93bb1de1ab3bc95953a08f79a867cbaf 100644 --- a/gosdn-cli/gosdn-cli.go +++ b/gosdn-cli/gosdn-cli.go @@ -3,13 +3,13 @@ package main import ( pb "code.fbi.h-da.de/cocsn/gosdn/cliInterface" "context" + "flag" "fmt" "github.com/rivo/tview" "google.golang.org/grpc" "log" "os" "time" - "flag" ) const ( @@ -29,18 +29,18 @@ var ( type cliClientConfig struct { goSDNCLIAddr4 *string goSDNCLIPort4 *int - interactive *bool - goSDNCommand *string + interactive *bool + goSDNCommand *string } type commandOptions struct { - name string + name string description string - command func(conn *grpc.ClientConn) () + command func(conn *grpc.ClientConn) } -var commandList = map[string] commandOptions { - "hello": {"hello", "test connection to goSDN controller", goSDNSayHello}, +var commandList = map[string]commandOptions{ + "hello": {"hello", "test connection to goSDN controller", goSDNSayHello}, "shutdown": {"shutdown", "request goSDN controller to shutdown", goSDNShutdown}, "testdb" : {"testdb", "test all database connections", goSDNTestDB}, "tapigetnodes" : {"testdb", "test all database connections", goSDNTestDB}, @@ -50,7 +50,7 @@ var commandList = map[string] commandOptions { gosdn-cli allows to mode of operations: - interactive: text GUI to operate goSDN - non-interactive: basic CLI without text GUI - */ +*/ func main() { // This holds the basic configuration for gosdn-cli @@ -65,7 +65,7 @@ func main() { flag.Parse() // Print complete command list and exit - if (*printCommandList == true) { + if *printCommandList == true { for _, element := range commandList { fmt.Println(element.name + "\t" + element.description) } @@ -88,11 +88,11 @@ func main() { log.Println(("Connected to " + conn.Target())) // Check for non-interactive or interactive mode - if(*myConfiguration.interactive == false) { + if *myConfiguration.interactive == false { log.Println("starting in non-interactive mode") // Lookup command or die _, found := commandList[*myConfiguration.goSDNCommand] - if(found) { + if found { // Excecute desired command commandList[*myConfiguration.goSDNCommand].command(conn) } else { @@ -119,9 +119,9 @@ func main() { } } +func goSDNSayHello(conn *grpc.ClientConn) { func goSDNSayHello (conn *grpc.ClientConn) { - c := pb.NewGrpcCliClient(conn) // Contact the server and print out its response. @@ -137,10 +137,9 @@ func goSDNSayHello (conn *grpc.ClientConn) { } log.Printf("Greeting: %s", r.String()) - } -func goSDNShutdown (conn *grpc.ClientConn) { +func goSDNShutdown(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) @@ -158,6 +157,6 @@ func goSDNShutdown (conn *grpc.ClientConn) { log.Printf("Greeting: %s", r.GetMessage()) } -func goSDNTestDB(conn *grpc.ClientConn){ +func goSDNTestDB(conn *grpc.ClientConn) { // TODO: fill with code -} \ No newline at end of file +} diff --git a/log/logger.go b/log/logger.go index ab258d8b731c5b8692ee8afe37b9c18012b712b2..060ded548d286d1a863f6bd33d9d0b9edd809fb4 100644 --- a/log/logger.go +++ b/log/logger.go @@ -45,27 +45,27 @@ func Output(out io.Writer) { } func Debug(args ...interface{}) { - log(DEBUG, args) + log(DEBUG, args...) } func Info(args ...interface{}) { - log(INFO, args) + log(INFO, args...) } func Warn(args ...interface{}) { - log(WARNING, args) + log(WARNING, args...) } func Error(args ...interface{}) { - log(ERROR, args) + log(ERROR, args...) } func Fatal(args ...interface{}) { - log(FATAL, args) + log(FATAL, args...) } func Panic(args ...interface{}) { - log(PANIC, args) + log(PANIC, args...) } func log(level Level, args ...interface{}) { diff --git a/nucleus/controller.go b/nucleus/controller.go index 2b4cdb19219dc74bf77a48d02f3363df09d2ead3..de00cf348ba441d1d8ef8e6c4cd4c2b99eaf8d26 100644 --- a/nucleus/controller.go +++ b/nucleus/controller.go @@ -48,7 +48,7 @@ func (c *Core) Init(socket, configfile string) { c.AttachDatabase() //TODO: Create client config/CLI adapter - c.clients["ciena-mcp"] = ciena.NewMCPClient( "141.100.70.170", "", "", &c.database) + c.clients["ciena-mcp"] = ciena.NewMCPClient("141.100.70.170", "", "", &c.database) } func (c *Core) AttachDatabase() { diff --git a/restconf/util/unmarshal.go b/restconf/util/unmarshal.go index 2386eec8e18bc61e08b71fc7cc782ebe9318bb06..fa195f9357e99b8353a04f66b0a1abffa6c2f9ab 100644 --- a/restconf/util/unmarshal.go +++ b/restconf/util/unmarshal.go @@ -9,7 +9,7 @@ type YANGConsumer struct { Data *bytes.Buffer } -func (yc YANGConsumer)Consume(reader io.Reader, _ interface{}) error { - _,err := yc.Data.ReadFrom(reader) +func (yc YANGConsumer) Consume(reader io.Reader, _ interface{}) error { + _, err := yc.Data.ReadFrom(reader) return err }