123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package server
- import (
- "github.com/gorilla/websocket"
- "github.com/sirupsen/logrus"
- "godash/bookmark"
- "godash/files"
- "godash/hub"
- "godash/message"
- "godash/system"
- "godash/weather"
- "net/http"
- )
- type launchpadInformation struct {
- Title string
- Host string
- Bookmarks []bookmark.Bookmark
- Weather weather.OpenWeatherApiResponse
- System system.LiveInformation
- }
- func launchpad(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "text/html")
- files.ParseAndServeHtml(w, "index.gohtml", launchpadInformation{
- Title: "Godash",
- Bookmarks: bookmark.Bookmarks,
- Weather: weather.CurrentOpenWeather,
- System: system.Sys.Live,
- })
- }
- // @Schemes
- // @Summary get the current weather
- // @Description gets the current weather
- // @Tags weather
- // @Produce json
- // @Success 200 {object} weather.OpenWeatherApiResponse
- // @Success 204 {object} message.Response
- // @Router /weather [get]
- func getWeather(w http.ResponseWriter, r *http.Request) {
- if weather.Conf.OpenWeather.Key != "" {
- jsonResponse(w, weather.CurrentOpenWeather, http.StatusOK)
- } else {
- jsonResponse(w, message.Response{Message: message.NotFound.String()}, http.StatusNoContent)
- }
- }
- // @Schemes
- // @Summary live system information
- // @Description gets live information of the system
- // @Tags system
- // @Produce json
- // @Success 200 {object} system.LiveInformation
- // @Success 204 {object} message.Response
- // @Router /system/live [get]
- func routeLiveSystem(w http.ResponseWriter, r *http.Request) {
- if system.Config.LiveSystem {
- jsonResponse(w, system.Sys.Live, http.StatusOK)
- } else {
- jsonResponse(w, message.Response{Message: message.NotFound.String()}, http.StatusNoContent)
- }
- }
- // @Schemes
- // @Summary static system information
- // @Description gets static information of the system
- // @Tags system
- // @Produce json
- // @Success 200 {object} system.StaticInformation
- // @Success 204 {object} message.Response
- // @Router /system/static [get]
- func routeStaticSystem(w http.ResponseWriter, r *http.Request) {
- if system.Config.LiveSystem {
- jsonResponse(w, system.Sys.Static, http.StatusOK)
- } else {
- jsonResponse(w, message.Response{Message: message.NotFound.String()}, http.StatusNoContent)
- }
- }
- func webSocket(w http.ResponseWriter, r *http.Request) {
- conn, err := upgrader.Upgrade(w, r, nil)
- if err != nil {
- logrus.WithField("error", err).Warning("Cannot upgrade websocket")
- return
- }
- messageChan := make(hub.NotifierChan)
- server.Hub.NewClients <- messageChan
- defer func() {
- server.Hub.ClosingClients <- messageChan
- conn.Close()
- }()
- go readPump(conn)
- for {
- select {
- case msg, ok := <-messageChan:
- if !ok {
- err := conn.WriteMessage(websocket.CloseMessage, []byte{})
- if err != nil {
- return
- }
- return
- }
- err := conn.WriteJSON(msg)
- if err != nil {
- return
- }
- }
- }
- }
|