func redispublishint(key string, num int) error { c, err := database.GetRedisConnection(getredisconnect()) if err != nil { rcon := database.RedisConn{Conn: c} rcon.Publish(AppID+":"+key, fmt.Sprintf("%d", num)) rcon.Flush() rcon.Close() } return err }
func main() { dbcon, err := database.GetDatabaseConnection() if err != nil { logger.Panicln(err) } defer dbcon.Close() analyser := NewAnalyser(dbcon, redis.NewPool(func() (redis.Conn, error) { return database.GetRedisConnection(getredisconnect()) }, 10)) restful.DefaultResponseMimeType = restful.MIME_JSON restful.DefaultContainer.EnableContentEncoding(true) restful.Add(NewAnalyseOGDATRESTService(analyser)) config := swagger.Config{ WebServicesUrl: discoveryhost(), ApiPath: "/swaggerdoc", SwaggerPath: "/doc/", SwaggerFilePath: "swagger-ui/dist/", WebServices: restful.RegisteredWebServices()} swagger.InstallSwaggerService(config) logger.Printf("analyser (%s) listening on port %s\n", AppID, portbinding()) go func() { logger.Fatal(http.ListenAndServe(":"+portbinding(), nil)) }() var datachange, urlchange chan []byte var heartbeatchannel chan bool populatedatasetinfo := func() { if err := analyser.populatedatasetinfo(); err != nil { logger.Panicln(err) } } if !isonlyweb() { heartbeatchannel = heartbeat(getheartbeatinterval()) <-heartbeatchannel // Wait for the first heartbeat, so the logging in the database is properly set up populatedatasetinfo() datachange = analyser.listenredischannel(watcherappid + ":DataChange") urlchange = analyser.listenredischannel(watcherappid + ":UrlChange") } for { select { case <-urlchange: // = REMARK = // Naive approach here. If a URLChange or DataChange event is triggered, // the whole analytic database will be recreated. It would be better to trace // only the affected datasets and only create the relevant statistic. // In future, urlchange/datachange might contain a JSON-encoded []byte which contains // the affected IDs logger.Println("Received URL change notice, re-generating database analysis") populatedatasetinfo() case <-datachange: logger.Println("Received Data change notice, re-generating database analysis") populatedatasetinfo() case <-heartbeatchannel: logger.Println("Idle") } } }