raid.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 "create":
  26. // Create a new RAID device, devName (Optional, e.g. md0), raidName (e.g. myraid), level (e.g. 0),
  27. // raidDev(e.g. sda,sdb), spareDev(e.g. sdc), zerosuperblock(bool)
  28. raidManager.HandleCreateRAIDDevice(w, r)
  29. return
  30. case "overview":
  31. // Render the RAID overview page
  32. raidManager.HandleRenderOverview(w, r)
  33. return
  34. case "sync":
  35. // Get the RAID sync state, require "dev=md0" as a query parameter
  36. raidManager.HandleGetRAIDSyncState(w, r)
  37. return
  38. case "start-resync":
  39. // Activate a RAID device, require "dev=md0" as a query parameter
  40. raidManager.HandleSyncPendingToReadWrite(w, r)
  41. return
  42. case "reassemble":
  43. // Reassemble all RAID devices
  44. raidManager.HandleForceAssembleReload(w, r)
  45. return
  46. case "delete":
  47. // Delete a RAID device, require "raidDev=md0" as a query parameter
  48. raidManager.HandleRemoveRaideDevice(w, r)
  49. return
  50. case "add":
  51. // Add a new disk to the RAID device, require "dev=md0" as a query parameter
  52. raidManager.HandleAddDiskToRAIDVol(w, r)
  53. return
  54. case "test":
  55. //DEBUG Code
  56. devname, err := utils.GetPara(r, "dev")
  57. if err != nil {
  58. http.Error(w, err.Error(), http.StatusBadRequest)
  59. return
  60. }
  61. bs, err := blkstat.GetInstalledBus(devname)
  62. if err != nil {
  63. http.Error(w, err.Error(), http.StatusInternalServerError)
  64. return
  65. }
  66. js, _ := json.Marshal(bs)
  67. utils.SendJSONResponse(w, string(js))
  68. return
  69. default:
  70. http.Error(w, "Not Found", http.StatusNotFound)
  71. return
  72. }
  73. }))
  74. }