8000 feat(contrib): hubot-xmpp, cds2http (#3611) · ovh/cds@235c4d0 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 235c4d0

Browse files
yesnaultfsamin
authored andcommitted
feat(contrib): hubot-xmpp, cds2http (#3611)
1 parent 9617fa1 commit 235c4d0

File tree

21 files changed

+221
-587
lines changed

21 files changed

+221
-587
lines changed

contrib/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ See [Plugins Documentation](https://ovh.github.io/cds/workflows/pipelines/pipeli
2121

2222
## µServices
2323

24-
- [cds2xmpp](https://github.com/ovh/cds/tree/master/contrib/uservices/cds2xmpp)
24+
- [cds2es](https://github.com/ovh/cds/tree/master/contrib/uservices/cds2es)
25+
- [cds2http](https://github.com/ovh/cds/tree/master/contrib/uservices/cds2http)
26+
- [Hubot XMPP](https://github.com/ovh/cds/tree/master/contrib/uservices/hubot-xmpp)
2527

2628
## Contributions
2729

contrib/uservices/cds2http/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# CDS to HTTP
2+
3+
This µservice:
4+
- consume a CDS Event Kafka topic
5+
- for each event of type "EventNotif", POST to a HTTP Url the event content
6+
7+
## How to run it?
8+
9+
```
10+
go build
11+
./service --log-level=debug \
12+
--event-kafka-broker-addresses=your-kafka-broker:9093 \
13+
--event-kafka-topic=cds-example.example-events \
14+
--event-kafka-user=cds-example.reader \
15+
--event-kafka-password=your-password \
16+
--event-kafka-group=cds-example.reader.example-cds2http \
17+
--event-remote-url=http://127.0.0.1:8080/cds/notifications
18+
```

contrib/uservices/cds2xmpp/service/main.go renamed to contrib/uservices/cds2http/service/main.go

Lines changed: 13 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
const VERSION = "0.1.0"
1616

1717
var mainCmd = &cobra.Command{
18-
Use: "cds2xmpp",
18+
Use: "cds2http",
1919
Run: func(cmd *cobra.Command, args []string) {
2020
viper.SetEnvPrefix("cds")
2121
viper.AutomaticEnv()
@@ -56,87 +56,43 @@ var mainCmd = &cobra.Command{
5656
MaxHeaderBytes: 1 << 20,
5757
}
5858

59-
var err error
60-
cdsbot, err = getBotClient()
61-
if err != nil {
62-
log.Fatalf("Error while initialize client err:%s", err)
63-
}
64-
65-
go cdsbot.born()
66-
67-
log.Infof("Running cds2xmpp on %s", viper.GetString("listen_port"))
59+
go do()
60+
log.Infof("Running cds2http on %s", viper.GetString("listen_port"))
6861
if err := s.ListenAndServe(); err != nil {
6962
log.Errorf("Error while running ListenAndServe: %s", err.Error())
7063
}
71-
7264
},
7365
}
7466

7567
func init() {
7668
flags := mainCmd.Flags()
7769

7870
flags.String("log-level", "", "Log Level : debug, info or warn")
79-
viper.BindPFlag("log_level", flags.Lookup("log-level"))
71+
viper.BindPFlag("log_level", flags.Lookup("log-level")) // nolint
8072

8173
flags.String("listen-port", "8085", "Listen Port")
82-
viper.BindPFlag("listen_port", flags.Lookup("listen-port"))
74+
viper.BindPFlag("listen_port", flags.Lookup("listen-port")) // nolint
8375

8476
flags.String("event-kafka-broker-addresses", "", "Ex: --event-kafka-broker-addresses=host:port,host2:port2")
85-
viper.BindPFlag("event_kafka_broker_addresses", flags.Lookup("event-kafka-broker-addresses"))
77+
viper.BindPFlag("event_kafka_broker_addresses", flags.Lookup("event-kafka-broker-addresses")) // nolint
8678

8779
flags.String("event-kafka-topic", "", "Ex: --kafka-topic=your-kafka-topic")
88-
viper.BindPFlag("event_kafka_topic", flags.Lookup("event-kafka-topic"))
80+
viper.BindPFlag("event_kafka_topic", flags.Lookup("event-kafka-topic")) // nolint
8981

9082
flags.String("event-kafka-user", "", "Ex: --kafka-user=your-kafka-user")
91-
viper.BindPFlag("event_kafka_user", flags.Lookup("event-kafka-user"))
83+
viper.BindPFlag("event_kafka_user", flags.Lookup("event-kafka-user")) // nolint
9284

9385
flags.String("event-kafka-password", "", "Ex: --kafka-password=your-kafka-password")
94-
viper.BindPFlag("event_kafka_password", flags.Lookup("event-kafka-password"))
86+
viper.BindPFlag("event_kafka_password", flags.Lookup("event-kafka-password")) // nolint
9587

9688
flags.String("event-kafka-group", "", "Ex: --kafka-group=your-kafka-group")
97-
viper.BindPFlag("event_kafka_group", flags.Lookup("event-kafka-group"))
98-
99-
flags.String("xmpp-server", "", "XMPP Server")
100-
viper.BindPFlag("xmpp_server", flags.Lookup("xmpp-server"))
101-
102-
flags.String("xmpp-bot-jid", "cds@localhost", "XMPP Bot JID")
103-
viper.BindPFlag("xmpp_bot_jid", flags.Lookup("xmpp-bot-jid"))
104-
105-
flags.String("xmpp-bot-password", "", "XMPP Bot Password")
106-
viper.BindPFlag("xmpp_bot_password", flags.Lookup("xmpp-bot-password"))
107-
108-
flags.String("admin-cds2xmpp", "", "Admin cds2xmpp admina@jabber.yourdomain.net,adminb@jabber.yourdomain.net,")
109-
viper.BindPFlag("admin_cds2xmpp", flags.Lookup("admin-cds2xmpp"))
89+
viper.BindPFlag("event_kafka_group", flags.Lookup("event-kafka-group")) // nolint
11090

111-
flags.String("admin-conference", "", "CDS Admin conference cds@conference.jabber.yourdomain.net")
112-
viper.BindPFlag("admin_conference", flags.Lookup("admin-conference"))
113-
114-
flags.Bool("xmpp-debug", false, "XMPP Debug")
115-
viper.BindPFlag("xmpp_debug", flags.Lookup("xmpp-debug"))
116-
117-
flags.Bool("xmpp-notls", true, "XMPP No TLS")
118-
viper.BindPFlag("xmpp_notls", flags.Lookup("xmpp-notls"))
119-
120-
flags.Bool("xmpp-starttls", false, "XMPP Start TLS")
121-
viper.BindPFlag("xmpp_starttls", flags.Lookup("xmpp-starttls"))
122-
123-
flags.Bool("xmpp-session", true, "XMPP Session")
124-
viper.BindPFlag("xmpp_session", flags.Lookup("xmpp-session"))
91+
flags.String("event-remote-url", "", "Ex: --event-remote-url=your-remote-url")
92+
viper.BindPFlag("event_remote_url", flags.Lookup("event-remote-url")) // nolint
12593

12694
flags.Bool("force-dot", true, "If destination (except conference) does not contains '.' skip destination")
127-
viper.BindPFlag("force_dot", flags.Lookup("force-dot"))
128-
129-
flags.Bool("xmpp-insecure-skip-verify", true, "XMPP InsecureSkipVerify")
130-
viper.BindPFlag("xmpp_insecure_skip_verify", flags.Lookup("xmpp-insecure-skip-verify"))
131-
132-
flags.String("xmpp-default-hostname", "", "Default Hostname for user, enter your.jabber.net for @your.jabber.net")
133-
viper.BindPFlag("xmpp_default_hostname", flags.Lookup("xmpp-default-hostname"))
134-
135-
flags.Int("xmpp-delay", 5, "Delay between two sent messages")
136-
viper.BindPFlag("xmpp_delay", flags.Lookup("xmpp-delay"))
137-
138-
flags.String("more-help", "", "Text added on /cds help")
139-
viper.BindPFlag("more_help", flags.Lookup("more-help"))
95+
viper.BindPFlag("force_dot", flags.Lookup("force-dot")) // nolint
14096
}
14197

14298
func main() {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
"io"
8+
"io/ioutil"
9+
"net/http"
10+
"time"
11+
12+
"github.com/mitchellh/mapstructure"
13+
log "github.com/sirupsen/logrus"
14+
"github.com/spf13/viper"
15+
16+
"github.com/ovh/cds/sdk"
17+
"github.com/ovh/cds/sdk/cdsclient"
18+
"github.com/ovh/cds/sdk/event"
19+
)
20+
21+
func do() {
22+
httpClient := cdsclient.NewHTTPClient(10*time.Second, false)
23+
log.Debugf("do> consume kafka: %s", viper.GetString("event_kafka_topic"))
24+
if err := event.ConsumeKafka(viper.GetString("event_kafka_broker_addresses"),
25+
viper.GetString("event_kafka_topic"),
26+
viper.GetString("event_kafka_group"),
27+
viper.GetString("event_kafka_user"),
28+
viper.GetString("event_kafka_password"),
29+
func(e sdk.Event) error {
30+
return process(e, httpClient)
31+
},
32+
log.Errorf,
33+
); err != nil {
34+
log.Errorf("Error on init kafka:%v", err)
35+
}
36+
}
37+
38+
func process(event sdk.Event, client *http.Client) error {
39+
var eventNotif sdk.EventNotif
40+
log.Debugf("process> receive: type:%s", event.EventType)
41+
42+
// skip all event != eventNotif
43+
if event.EventType != fmt.Sprintf("%T", sdk.EventNotif{}) {
44+
log.Debugf("process> receive: type:%s - skipped", event.EventType)
45+
return nil
46+
}
47+
48+
if err := mapstructure.Decode(event.Payload, &eventNotif); err != nil {
49+
log.Warnf("process> Error during consumption. type:%s err:%s", event.EventType, err)
50+
return nil
51+
}
52+
53+
b, err := json.Marshal(eventNotif)
54+
if err != nil {
55+
return err
56+
}
57+
58+
var body io.Reader
59+
if len(b) > 0 {
60+
body = bytes.NewBuffer(b)
61+
}
62+
63+
req, err := http.NewRequest("POST", viper.GetString("event_remote_url"), body)
64+
if err != nil {
65+
return fmt.Errorf("process> Error during http.NewRequest: %v", err)
66+
}
67+
req.Header.Set("Content-Type", "application/json")
68+
69+
resp, err := client.Do(req)
70+
if err != nil {
71+
return fmt.Errorf("process> Error during client.Do: %v", err)
72+
}
73+
defer resp.Body.Close()
74+
75+
response, _ := ioutil.ReadAll(resp.Body)
76+
log.Debugf("process> event:%+v > response body: %v", event, response)
77+
78+
return nil
79+
}

contrib/uservices/cds2xmpp/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

contrib/uservices/cds2xmpp/service/answer.go

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0