parent
7b7c419f03
commit
234a50adb2
@ -0,0 +1,79 @@ |
|||||||
|
package ui |
||||||
|
|
||||||
|
import ( |
||||||
|
"cli-mon/yabl" |
||||||
|
"context" |
||||||
|
json "encoding/json" |
||||||
|
"fmt" |
||||||
|
amqp "github.com/rabbitmq/amqp091-go" |
||||||
|
"os" |
||||||
|
"time" |
||||||
|
) |
||||||
|
|
||||||
|
const exchange = "yabl-newproto-in" |
||||||
|
|
||||||
|
var hostname, _ = os.Hostname() |
||||||
|
|
||||||
|
type broker struct { |
||||||
|
uri string |
||||||
|
conn *amqp.Connection |
||||||
|
ch *amqp.Channel |
||||||
|
} |
||||||
|
|
||||||
|
func NewAmqp(uri string) UI { |
||||||
|
return &broker{uri: uri} |
||||||
|
} |
||||||
|
|
||||||
|
func (b *broker) Consume(event *yabl.Event) { |
||||||
|
var bytes []byte |
||||||
|
var err error |
||||||
|
if bytes, err = json.Marshal(event); err != nil { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
route := fmt.Sprintf( |
||||||
|
"%s.%s.%s.%d", |
||||||
|
hostname, |
||||||
|
event.ActionName, |
||||||
|
event.Field, |
||||||
|
event.GetUnitId()) |
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) |
||||||
|
defer cancel() |
||||||
|
|
||||||
|
if err = b.ch.PublishWithContext(ctx, |
||||||
|
exchange, |
||||||
|
route, |
||||||
|
false, |
||||||
|
false, |
||||||
|
amqp.Publishing{ |
||||||
|
ContentType: "application/json", |
||||||
|
Body: bytes, |
||||||
|
}); err != nil { |
||||||
|
fmt.Printf("Can't publish msg: %v", err) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (b *broker) Start() { |
||||||
|
var err error |
||||||
|
b.conn, err = amqp.Dial(b.uri) |
||||||
|
if err != nil { |
||||||
|
panic(fmt.Sprintf("Can't connect to AMQP: %v", err)) |
||||||
|
} |
||||||
|
|
||||||
|
b.ch, err = b.conn.Channel() |
||||||
|
if err != nil { |
||||||
|
panic(fmt.Sprintf("Can't create AMQP channel: %v", err)) |
||||||
|
} |
||||||
|
|
||||||
|
fmt.Printf("AMQP client connected to %v, sending data to server..", b.uri) |
||||||
|
} |
||||||
|
|
||||||
|
func (b *broker) Stop() { |
||||||
|
if b.conn != nil { |
||||||
|
b.conn.Close() |
||||||
|
} |
||||||
|
if b.ch != nil { |
||||||
|
b.ch.Close() |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package ui |
||||||
|
|
||||||
|
import ( |
||||||
|
"cli-mon/yabl" |
||||||
|
"testing" |
||||||
|
"time" |
||||||
|
) |
||||||
|
|
||||||
|
func TestNewAmqp(t *testing.T) { |
||||||
|
t.Run("Amqp Test", func(t *testing.T) { |
||||||
|
client := NewAmqp("amqp://user:password@localhost:5672/") |
||||||
|
|
||||||
|
if client == nil { |
||||||
|
t.Errorf("Can't create client") |
||||||
|
} |
||||||
|
|
||||||
|
client.Start() |
||||||
|
|
||||||
|
now := time.Now() |
||||||
|
|
||||||
|
event := &yabl.Event{ |
||||||
|
Field: yabl.FBoardReady, |
||||||
|
ActionName: yabl.PPuErrors, |
||||||
|
Object: nil, |
||||||
|
//unit: 3,
|
||||||
|
Updated: &now, |
||||||
|
Value: yabl.ERROR, |
||||||
|
} |
||||||
|
|
||||||
|
client.Consume(event) |
||||||
|
|
||||||
|
client.Stop() |
||||||
|
}) |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue