raid.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strings"
  6. "imuslab.com/bokofs/bokofsd/mod/diskinfo/blkstat"
  7. "imuslab.com/bokofs/bokofsd/mod/utils"
  8. )
  9. /*
  10. raid.go
  11. This file handles the RAID management and monitoring API routing
  12. */
  13. func HandleRAIDCalls() http.Handler {
  14. return http.StripPrefix("/raid/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  15. pathParts := strings.Split(r.URL.Path, "/")
  16. switch pathParts[0] {
  17. case "list":
  18. // List all RAID devices
  19. raidManager.HandleListRaidDevices(w, r)
  20. return
  21. case "info":
  22. // Handle loading the detail of a given RAID array, require "dev=md0" as a query parameter
  23. raidManager.HandleLoadArrayDetail(w, r)
  24. return
  25. case "overview":
  26. // Render the RAID overview page
  27. raidManager.HandleRenderOverview(w, r)
  28. return
  29. case "sync":
  30. // Get the RAID sync state, require "dev=md0" as a query parameter
  31. raidManager.HandleGetRAIDSyncState(w, r)
  32. return
  33. case "start-resync":
  34. // Activate a RAID device, require "dev=md0" as a query parameter
  35. raidManager.HandleSyncPendingToReadWrite(w, r)
  36. return
  37. case "reassemble":
  38. // Reassemble all RAID devices
  39. raidManager.HandleForceAssembleReload(w, r)
  40. return
  41. case "test":
  42. devname, err := utils.GetPara(r, "dev")
  43. if err != nil {
  44. http.Error(w, err.Error(), http.StatusBadRequest)
  45. return
  46. }
  47. bs, err := blkstat.GetInstalledBus(devname)
  48. if err != nil {
  49. http.Error(w, err.Error(), http.StatusInternalServerError)
  50. return
  51. }
  52. js, _ := json.Marshal(bs)
  53. utils.SendJSONResponse(w, string(js))
  54. return
  55. default:
  56. http.Error(w, "Not Found", http.StatusNotFound)
  57. return
  58. }
  59. }))
  60. }