Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
HARMONY
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Automate
Agent sessions
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Amel Abdic
HARMONY
Commits
d6c2e527
Commit
d6c2e527
authored
Sep 28, 2023
by
Jens Heise
Browse files
Options
Downloads
Patches
Plain Diff
Change std server behaviour and improve code organization.
parent
fc248bfb
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
cmd/web/main.go
+10
-5
10 additions, 5 deletions
cmd/web/main.go
web/server.go
+4
-31
4 additions, 31 deletions
web/server.go
web/server_events.go
+29
-0
29 additions, 0 deletions
web/server_events.go
web/std_server.go
+122
-0
122 additions, 0 deletions
web/std_server.go
with
165 additions
and
36 deletions
cmd/web/main.go
+
10
−
5
View file @
d6c2e527
...
...
@@ -19,6 +19,7 @@ func main() {
Logger
:
trace
.
NewStdLogger
(),
}
m
:=
core
.
Manager
()
em
:=
core
.
NewStdEventManager
(
args
.
Logger
)
errs
=
m
.
Setup
(
&
args
,
ctx
)
if
errs
!=
nil
{
...
...
@@ -31,12 +32,16 @@ func main() {
}
defer
m
.
Stop
(
&
args
)
s
:=
web
.
NewServer
(
&
web
.
ServerConfig
{
Logger
:
args
.
Logger
,
Addr
:
":8080"
,
},
ctx
)
s
:=
web
.
NewStdServer
(
web
.
WithEventManger
(
em
))
err
:=
s
.
Serve
(
ctx
)
s
.
RegisterController
(
nil
)
err
:=
s
.
Setup
(
ctx
)
if
errs
!=
nil
{
panic
(
fmt
.
Sprintf
(
"Setup failed: %v"
,
errs
))
}
err
=
s
.
Serve
(
ctx
)
if
err
!=
nil
{
panic
(
fmt
.
Sprintf
(
"Serve failed: %v"
,
errs
))
}
...
...
This diff is collapsed.
Click to expand it.
web/server.go
+
4
−
31
View file @
d6c2e527
...
...
@@ -3,42 +3,15 @@ package web
import
(
"context"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/org-harmony/harmony/trace"
)
const
ServerMod
=
"sys.web.server"
type
StdServer
struct
{
r
chi
.
Router
config
*
ServerConfig
}
type
ServerConfig
struct
{
Logger
trace
.
Logger
Addr
string
}
type
Server
interface
{
Setup
(
ctx
context
.
Context
)
error
Serve
(
ctx
context
.
Context
)
error
RegisterController
(
c
...
Controller
)
RegisterMiddleware
(
m
...
func
(
http
.
Handler
)
http
.
Handler
)
}
func
NewServer
(
config
*
ServerConfig
,
ctx
context
.
Context
)
*
StdServer
{
r
:=
chi
.
NewRouter
()
r
.
Get
(
"/"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
Write
([]
byte
(
"hello world!"
))
})
return
&
StdServer
{
r
:
r
,
config
:
config
,
}
}
func
(
s
*
StdServer
)
Serve
(
ctx
context
.
Context
)
error
{
s
.
config
.
Logger
.
Info
(
ServerMod
,
"starting web server..."
)
return
http
.
ListenAndServe
(
s
.
config
.
Addr
,
s
.
r
)
}
type
Controller
interface
{}
This diff is collapsed.
Click to expand it.
web/server_events.go
0 → 100644
+
29
−
0
View file @
d6c2e527
package
web
import
(
"github.com/org-harmony/harmony/core"
)
type
ServerSetupEvent
struct
{
S
Server
}
func
(
e
*
ServerSetupEvent
)
ID
()
string
{
return
core
.
BuildEventID
(
ServerMod
,
"server"
,
"setup"
)
}
func
(
e
*
ServerSetupEvent
)
Payload
()
any
{
return
e
}
type
ServerStartEvent
struct
{
S
Server
}
func
(
e
*
ServerStartEvent
)
ID
()
string
{
return
core
.
BuildEventID
(
ServerMod
,
"server"
,
"start"
)
}
func
(
e
*
ServerStartEvent
)
Payload
()
any
{
return
e
}
This diff is collapsed.
Click to expand it.
web/std_server.go
0 → 100644
+
122
−
0
View file @
d6c2e527
package
web
import
(
"context"
"errors"
"fmt"
"github.com/go-chi/chi/v5"
"github.com/org-harmony/harmony/core"
"github.com/org-harmony/harmony/trace"
"net/http"
)
const
StdServerMod
=
"sys.web.std-server"
type
StdServer
struct
{
config
*
StdServerConfig
}
type
StdServerConfig
struct
{
Router
chi
.
Router
Logger
trace
.
Logger
Addr
string
EventManager
*
core
.
StdEventManager
}
type
StdServerConfigFunc
func
(
*
StdServerConfig
)
func
WithRouter
(
r
chi
.
Router
)
StdServerConfigFunc
{
return
func
(
cfg
*
StdServerConfig
)
{
cfg
.
Router
=
r
}
}
func
WithLogger
(
l
trace
.
Logger
)
StdServerConfigFunc
{
return
func
(
cfg
*
StdServerConfig
)
{
cfg
.
Logger
=
l
}
}
func
WithAddr
(
addr
string
)
StdServerConfigFunc
{
return
func
(
cfg
*
StdServerConfig
)
{
cfg
.
Addr
=
addr
}
}
func
WithEventManger
(
em
*
core
.
StdEventManager
)
StdServerConfigFunc
{
return
func
(
cfg
*
StdServerConfig
)
{
cfg
.
EventManager
=
em
}
}
func
defaultStdServerConfig
()
*
StdServerConfig
{
return
&
StdServerConfig
{
Router
:
chi
.
NewRouter
(),
Logger
:
trace
.
NewStdLogger
(),
Addr
:
":8080"
,
}
}
// NewStdServer creates a new instance of StdServer.
// The server is configured using the provided ServerConfigFuncs.
// If no ServerConfigFuncs are provided the server is configured with default values from defaultStdServerConfig.
//
// The StdEventManager is required if it is not set the function will panic as there is not sense in running the server without an StdEventManager.
func
NewStdServer
(
cfg
...
StdServerConfigFunc
)
*
StdServer
{
config
:=
defaultStdServerConfig
()
for
_
,
f
:=
range
cfg
{
f
(
config
)
}
if
config
.
EventManager
==
nil
{
panic
(
"event manager is nil but should always be set"
)
}
return
&
StdServer
{
config
:
config
,
}
}
func
(
s
*
StdServer
)
Setup
(
ctx
context
.
Context
)
error
{
s
.
config
.
Logger
.
Info
(
StdServerMod
,
"setting up web server..."
)
dc
:=
make
(
chan
[]
error
)
s
.
config
.
EventManager
.
Publish
(
&
ServerSetupEvent
{
S
:
s
},
dc
)
errs
:=
<-
dc
if
len
(
errs
)
>
0
{
errs
=
append
(
errs
,
fmt
.
Errorf
(
"failed to setup server during event execution"
))
return
errors
.
Join
(
errs
...
)
}
return
nil
}
func
(
s
*
StdServer
)
Serve
(
ctx
context
.
Context
)
error
{
s
.
config
.
Logger
.
Info
(
StdServerMod
,
"starting web server..."
)
dc
:=
make
(
chan
[]
error
)
s
.
config
.
EventManager
.
Publish
(
&
ServerStartEvent
{
S
:
s
},
dc
)
errs
:=
<-
dc
if
len
(
errs
)
>
0
{
errs
=
append
(
errs
,
fmt
.
Errorf
(
"failed to start server during event execution"
))
return
errors
.
Join
(
errs
...
)
}
return
http
.
ListenAndServe
(
s
.
config
.
Addr
,
s
.
config
.
Router
)
}
func
(
s
*
StdServer
)
RegisterController
(
c
...
Controller
)
{
s
.
config
.
Router
.
Get
(
"/"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
_
,
err
:=
fmt
.
Fprintf
(
w
,
"Hello World!"
)
if
err
!=
nil
{
s
.
config
.
Logger
.
Error
(
StdServerMod
,
"failed to write response"
,
"error"
,
err
)
}
})
}
func
(
s
*
StdServer
)
RegisterMiddleware
(
m
...
func
(
http
.
Handler
)
http
.
Handler
)
{
s
.
config
.
Router
.
Use
(
m
...
)
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
sign in
to comment