raid.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 "test":
  38. devname, err := utils.GetPara(r, "dev")
  39. if err != nil {
  40. http.Error(w, err.Error(), http.StatusBadRequest)
  41. return
  42. }
  43. bs, err := blkstat.GetInstalledBus(devname)
  44. if err != nil {
  45. http.Error(w, err.Error(), http.StatusInternalServerError)
  46. return
  47. }
  48. js, _ := json.Marshal(bs)
  49. utils.SendJSONResponse(w, string(js))
  50. return
  51. default:
  52. http.Error(w, "Not Found", http.StatusNotFound)
  53. return
  54. }
  55. }))
  56. }