in main.go [84:190]
func main() {
vidispine_url_str := os.Getenv("VIDISPINE_URL")
vidispine_user := os.Getenv("VIDISPINE_USER")
vidispine_passwd := os.Getenv("VIDISPINE_PASSWORD")
callback_uri_str := os.Getenv("CALLBACK_BASE")
rabbitmq_uri_str := os.Getenv("RABBITMQ_URI")
exchangeName := os.Getenv("RABBITMQ_EXCHANGE")
if vidispine_url_str == "" || vidispine_user == "" || vidispine_passwd == "" {
log.Fatal("Please set VIDISPINE_URL, VIDISPINE_USER and VIDISPINE_PASSWORD in the environment")
}
if callback_uri_str == "" {
log.Fatal("Please set CALLBACK_BASE in the environment")
}
if rabbitmq_uri_str == "" {
log.Fatal("Please set RABBITMQ_URI in the environment")
}
if exchangeName == "" {
log.Fatal("Please set RABBITMQ_EXCHANGE in the environment")
}
vidispine_url, url_parse_err := url.Parse(vidispine_url_str)
if url_parse_err != nil {
log.Fatal("VIDISPINE_URL is not valid: ", url_parse_err)
}
callback_url, url_parse_err := url.Parse(callback_uri_str)
if url_parse_err != nil {
log.Fatal("CALLBACK_BASE is not valid: ", url_parse_err)
}
rmq, rmqErr := amqp.Dial(rabbitmq_uri_str)
if rmqErr != nil {
log.Fatal("Could not connect to rabbitmq: ", rmqErr)
}
conn := &mocks.AmqpConnectionShim{
Connection: rmq,
}
/*
ensure that rabbitmq connection is terminated cleanly even if program exits uncleanly
*/
defer func() {
if r := recover(); r != nil {
log.Print("WARNING main Program is existing due to panic")
if rmq != nil && !rmq.IsClosed() {
log.Print("INFO main Shutting down broker connection")
closeErr := rmq.Close()
if closeErr != nil {
log.Print("ERROR main Could not shut down broker connection but terminating anyway ", closeErr)
}
}
os.Exit(0xFF)
}
}()
/*
ensure that rabbiqmq connection is terminated cleanly if we receive termination signal
*/
handleSignals(conn)
requestor := vidispine.NewVSRequestor(*vidispine_url, vidispine_user, vidispine_passwd)
setUpNotifications(vidispine_url, requestor, callback_url)
setUpExchange(rmq, exchangeName)
amqpPool := sender.NewAmqpConnectionPool(conn)
jobMessageHandler := VidispineMessageHandler{
ConnectionPool: amqpPool,
ExchangeName: exchangeName,
ChannelTimeout: 45 * time.Second,
}
itemMessageHandler := VidispineItemMessageHandler{
ConnectionPool: amqpPool,
ExchangeName: exchangeName,
ChannelTimeout: 45 * time.Second,
}
metaMessageHandler := VidispineMetadataMessageHandler{
ConnectionPool: amqpPool,
ExchangeName: exchangeName,
ChannelTimeout: 45 * time.Second,
}
shapeMessageHandler := VidispineShapeMessageHandler{
ConnectionPool: amqpPool,
ExchangeName: exchangeName,
ChannelTimeout: 45 * time.Second,
}
healthcheckHandler := HealthcheckHandler{}
log.Printf("Callback URL path is %s", callback_url.Path)
http.Handle(callback_url.Path+"/job", jobMessageHandler)
http.Handle(callback_url.Path+"/item/metadata", metaMessageHandler)
http.Handle(callback_url.Path+"/item", itemMessageHandler)
http.Handle(callback_url.Path+"/item/shape", shapeMessageHandler)
http.Handle("/healthcheck", healthcheckHandler)
log.Printf("Starting up on port 8080...")
startServeErr := http.ListenAndServe(":8080", nil)
if startServeErr != nil {
log.Fatal(startServeErr)
}
}