Commit 2726b56833ab51faf5cfcdc90f82d3fb9c9119dc
1 parent
befe8fcc1d
Exists in
master
server
Showing
1 changed file
with
75 additions
and
0 deletions
Show diff stats
server.go
... | ... | @@ -0,0 +1,75 @@ |
1 | +package webutility | |
2 | + | |
3 | +import ( | |
4 | + "database/sql" | |
5 | + "fmt" | |
6 | + "net/http" | |
7 | + | |
8 | + "git.to-net.rs/marko.tikvic/gologger" | |
9 | + "github.com/gorilla/mux" | |
10 | +) | |
11 | + | |
12 | +type Server struct { | |
13 | + DB *sql.DB | |
14 | + Router *mux.Router | |
15 | + Logger *gologger.Logger | |
16 | + Port string | |
17 | + UTCOffset int64 | |
18 | +} | |
19 | + | |
20 | +func NewServer(dsn, port, logDir string, utcOffset int64) (s *Server, err error) { | |
21 | + s = new(Server) | |
22 | + | |
23 | + s.Port = port | |
24 | + | |
25 | + if s.DB, err = sql.Open("odbc", fmt.Sprintf("DSN=%s;", dsn)); err != nil { | |
26 | + return nil, err | |
27 | + } | |
28 | + | |
29 | + s.Router = mux.NewRouter() | |
30 | + | |
31 | + if s.Logger, err = gologger.New("err", logDir, gologger.MaxLogSize1MB); err != nil { | |
32 | + return nil, fmt.Errorf("can't create logger: %s", err.Error()) | |
33 | + } | |
34 | + | |
35 | + s.UTCOffset = utcOffset | |
36 | + | |
37 | + return s, nil | |
38 | +} | |
39 | + | |
40 | +func (s *Server) Run() { | |
41 | + s.Logger.Print("Server listening on %s", s.Port) | |
42 | + s.Logger.PrintAndTrace(http.ListenAndServe(s.Port, s.Router).Error()) | |
43 | +} | |
44 | + | |
45 | +func (s *Server) Cleanup() { | |
46 | + if s.DB != nil { | |
47 | + s.DB.Close() | |
48 | + } | |
49 | + | |
50 | + if s.Logger != nil { | |
51 | + s.Logger.Close() | |
52 | + } | |
53 | +} | |
54 | + | |
55 | +func (s *Server) StartTransaction() (*sql.Tx, error) { | |
56 | + return s.DB.Begin() | |
57 | +} | |
58 | + | |
59 | +func CommitChanges(tx *sql.Tx, err *error, opt ...error) { | |
60 | + if *err != nil { | |
61 | + tx.Rollback() | |
62 | + return | |
63 | + } | |
64 | + | |
65 | + for _, e := range opt { | |
66 | + if e != nil { | |
67 | + tx.Rollback() | |
68 | + return | |
69 | + } | |
70 | + } | |
71 | + | |
72 | + if *err = tx.Commit(); *err != nil { | |
73 | + tx.Rollback() | |
74 | + } | |
75 | +} | ... | ... |