main.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package main
  2. import (
  3. "demos/cmd/demo1/assets"
  4. "demos/ops/decodeops"
  5. "demos/ops/defaultops"
  6. "demos/ops/devops"
  7. "demos/ops/genericops"
  8. "demos/ops/ml"
  9. "demos/ops/stringops"
  10. "demos/ops/webops"
  11. "log"
  12. "mime"
  13. "net/http"
  14. "path/filepath"
  15. "strings"
  16. "github.com/gohxs/prettylog"
  17. "github.com/gohxs/webu"
  18. "github.com/gohxs/webu/chain"
  19. "github.com/hexasoftware/flow/flowserver"
  20. )
  21. //go:generate go get github.com/gohxs/folder2go
  22. //go:generate folder2go -handler -nobackup static assets assets
  23. func main() {
  24. prettylog.Global()
  25. log.Println("Running version:", flowserver.Version)
  26. addr := ":2015"
  27. log.Println("Starting server at:", addr)
  28. c := chain.New(webu.ChainLogger(prettylog.New("req")))
  29. mux := http.NewServeMux()
  30. mux.HandleFunc("/", assetFunc)
  31. defops := defaultops.New()
  32. defops.Merge(genericops.New())
  33. defops.Merge(stringops.New())
  34. mux.Handle("/default/", c.Build(
  35. http.StripPrefix("/default", flowserver.New(defops, "default")),
  36. ))
  37. mlReg := ml.New()
  38. mlReg.Merge(genericops.New())
  39. mlReg.Merge(stringops.New())
  40. mlReg.Merge(webops.New())
  41. mlReg.Merge(decodeops.New())
  42. mux.Handle("/machinelearning/", c.Build(
  43. http.StripPrefix("/machinelearning", flowserver.New(mlReg, "ml")),
  44. ))
  45. mux.Handle("/devops/", c.Build(
  46. http.StripPrefix("/devops", flowserver.New(devops.New(), "devops")),
  47. ))
  48. // Serve UI here
  49. // Context registry
  50. http.ListenAndServe(addr, mux)
  51. }
  52. func assetFunc(w http.ResponseWriter, r *http.Request) {
  53. urlPath := ""
  54. // func that handles mux
  55. server := r.Context().Value(http.ServerContextKey).(*http.Server)
  56. mux, ok := server.Handler.(*http.ServeMux)
  57. if ok {
  58. _, handlerPath := mux.Handler(r)
  59. urlPath = strings.TrimPrefix(r.URL.String(), handlerPath)
  60. }
  61. if urlPath == "" { // Auto index
  62. urlPath = "index.html"
  63. }
  64. data, ok := assets.Data[urlPath]
  65. if !ok {
  66. http.Redirect(w, r, "/default", 302)
  67. //w.WriteHeader(404)
  68. }
  69. w.Header().Set("Content-type", mime.TypeByExtension(filepath.Ext(urlPath)))
  70. w.Write(data)
  71. }