Skip to content

Commit 4c1fa63

Browse files
committed
Better code organization
1 parent 5630841 commit 4c1fa63

File tree

4 files changed

+107
-86
lines changed

4 files changed

+107
-86
lines changed

main.go

Lines changed: 6 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,24 @@ package main
33
import (
44
"flag"
55
"fmt"
6-
"log"
7-
"net"
8-
"net/http"
96
"os"
107
"os/signal"
118
"syscall"
129

13-
"github.com/Scalingo/sample-influxdb/config"
14-
"github.com/dghubble/go-twitter/twitter"
15-
"github.com/dghubble/oauth1"
16-
"github.com/go-martini/martini"
17-
"github.com/martini-contrib/render"
10+
"github.com/Scalingo/sample-influxdb/utils"
11+
"github.com/Scalingo/sample-influxdb/webserver"
12+
"github.com/Scalingo/sample-influxdb/worker"
1813
)
1914

20-
type Closer interface {
21-
Close() error
22-
}
23-
2415
func main() {
2516
flagIsWorker := flag.Bool("worker", false, "is a worker")
2617
flag.Parse()
2718

28-
var closer Closer
19+
var closer utils.Closer
2920
if *flagIsWorker {
30-
closer = startWorker()
21+
closer = worker.Start()
3122
} else {
32-
closer = startServer()
23+
closer = webserver.Start()
3324
}
3425

3526
sigs := make(chan os.Signal)
@@ -40,74 +31,3 @@ func main() {
4031
_ = closer.Close()
4132
}
4233
}
43-
44-
func startServer() Closer {
45-
m := martini.Classic()
46-
m.Use(render.Renderer(
47-
render.Options{
48-
Directory: "templates",
49-
},
50-
))
51-
52-
m.Get("/", func(r render.Render) {
53-
r.HTML(200, "index", nil)
54-
})
55-
56-
port := "3000"
57-
if os.Getenv("PORT") != "" {
58-
port = os.Getenv("PORT")
59-
}
60-
61-
listener, err := net.Listen("tcp", ":"+port)
62-
if err != nil {
63-
panic(err)
64-
}
65-
66-
go http.Serve(listener, m)
67-
log.Println("Listening on 0.0.0.0:" + port)
68-
return listener
69-
}
70-
71-
func startWorker() Closer {
72-
conf := oauth1.NewConfig(config.E["TWITTER_CONSUMER_KEY"], config.E["TWITTER_CONSUMER_SECRET"])
73-
token := oauth1.NewToken(config.E["TWITTER_ACCESS_TOKEN"], config.E["TWITTER_ACCESS_SECRET"])
74-
// OAuth1 http.Client will automatically authorize Requests
75-
httpClient := conf.Client(oauth1.NoContext, token)
76-
77-
// Twitter Client
78-
client := twitter.NewClient(httpClient)
79-
_ = client
80-
demux := twitter.NewSwitchDemux()
81-
_ = demux
82-
demux.Tweet = func(tweet *twitter.Tweet) {
83-
fmt.Println(tweet.Text)
84-
}
85-
demux.DM = func(dm *twitter.DirectMessage) {
86-
fmt.Println(dm.SenderID)
87-
}
88-
demux.Event = func(event *twitter.Event) {
89-
fmt.Printf("%#v\n", event)
90-
}
91-
fmt.Println("Starting Stream...")
92-
93-
// FILTER
94-
filterParams := &twitter.StreamFilterParams{
95-
Track: []string{"#Travail"},
96-
StallWarnings: twitter.Bool(true),
97-
}
98-
stream, err := client.Streams.Filter(filterParams)
99-
if err != nil {
100-
log.Fatal(err)
101-
}
102-
// Receive messages until stopped or stream quits
103-
go demux.HandleChan(stream.Messages)
104-
105-
// Wait for SIGINT and SIGTERM (HIT CTRL-C)
106-
ch := make(chan os.Signal)
107-
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
108-
log.Println(<-ch)
109-
110-
fmt.Println("Stopping Stream...")
111-
stream.Stop()
112-
return nil
113-
}

utils/Closer.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package utils
2+
3+
type Closer interface {
4+
Close() error
5+
}

webserver/webserver.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package webserver
2+
3+
import (
4+
"log"
5+
"net"
6+
"net/http"
7+
"os"
8+
9+
"github.com/Scalingo/sample-influxdb/utils"
10+
"github.com/go-martini/martini"
11+
"github.com/martini-contrib/render"
12+
)
13+
14+
func Start() utils.Closer {
15+
m := martini.Classic()
16+
m.Use(render.Renderer(
17+
render.Options{
18+
Directory: "templates",
19+
},
20+
))
21+
22+
m.Get("/", func(r render.Render) {
23+
r.HTML(200, "index", nil)
24+
})
25+
26+
port := "3000"
27+
if os.Getenv("PORT") != "" {
28+
port = os.Getenv("PORT")
29+
}
30+
31+
listener, err := net.Listen("tcp", ":"+port)
32+
if err != nil {
33+
panic(err)
34+
}
35+
36+
go http.Serve(listener, m)
37+
log.Println("Listening on 0.0.0.0:" + port)
38+
return listener
39+
}

worker/worker.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package worker
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/Scalingo/sample-influxdb/config"
8+
"github.com/Scalingo/sample-influxdb/utils"
9+
"github.com/dghubble/go-twitter/twitter"
10+
"github.com/dghubble/oauth1"
11+
)
12+
13+
type workerCloser struct {
14+
stream *twitter.Stream
15+
}
16+
17+
func (w workerCloser) Close() error {
18+
w.stream.Stop()
19+
return nil
20+
}
21+
22+
func Start() utils.Closer {
23+
conf := oauth1.NewConfig(config.E["TWITTER_CONSUMER_KEY"], config.E["TWITTER_CONSUMER_SECRET"])
24+
token := oauth1.NewToken(config.E["TWITTER_ACCESS_TOKEN"], config.E["TWITTER_ACCESS_SECRET"])
25+
// OAuth1 http.Client will automatically authorize Requests
26+
httpClient := conf.Client(oauth1.NoContext, token)
27+
28+
// Twitter Client
29+
client := twitter.NewClient(httpClient)
30+
demux := twitter.NewSwitchDemux()
31+
demux.Tweet = func(tweet *twitter.Tweet) {
32+
fmt.Println(tweet.Text)
33+
}
34+
demux.DM = func(dm *twitter.DirectMessage) {
35+
fmt.Println(dm.SenderID)
36+
}
37+
demux.Event = func(event *twitter.Event) {
38+
fmt.Printf("%#v\n", event)
39+
}
40+
fmt.Println("Starting Stream...")
41+
42+
filterParams := &twitter.StreamFilterParams{
43+
Track: []string{"#osezdirenon"},
44+
StallWarnings: twitter.Bool(true),
45+
}
46+
stream, err := client.Streams.Filter(filterParams)
47+
if err != nil {
48+
log.Fatal(err)
49+
}
50+
closer := workerCloser{
51+
stream: stream,
52+
}
53+
// Receive messages until stopped or stream quits
54+
go demux.HandleChan(stream.Messages)
55+
56+
return closer
57+
}

0 commit comments

Comments
 (0)