disk.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package main
  2. /*
  3. ArOZ Online Disk Service Endpoint Handler
  4. This is a module to provide access to the disk services
  5. */
  6. import (
  7. "log"
  8. "net/http"
  9. "imuslab.com/arozos/mod/disk/diskmg"
  10. diskspace "imuslab.com/arozos/mod/disk/diskspace"
  11. smart "imuslab.com/arozos/mod/disk/smart"
  12. sortfile "imuslab.com/arozos/mod/disk/sortfile"
  13. prout "imuslab.com/arozos/mod/prouter"
  14. )
  15. func DiskServiceInit() {
  16. //Register Disk Utilities under System Setting
  17. //Disk info are only viewable by administrator
  18. router := prout.NewModuleRouter(prout.RouterOption{
  19. ModuleName: "System Setting",
  20. AdminOnly: false,
  21. UserHandler: userHandler,
  22. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  23. sendErrorResponse(w, "Permission Denied")
  24. },
  25. })
  26. //Disk Space Display endpoint
  27. router.HandleFunc("/system/disk/space/list", diskspace.HandleDiskSpaceList)
  28. //New Large File Scanner
  29. lfs := sortfile.NewLargeFileScanner(userHandler)
  30. router.HandleFunc("/system/disk/space/largeFiles", lfs.HandleLargeFileList)
  31. //Register settings
  32. registerSetting(settingModule{
  33. Name: "Space Finder",
  34. Desc: "Reclaim Storage Space on Disks",
  35. IconPath: "SystemAO/disk/space/img/small_icon.png",
  36. Group: "Disk",
  37. StartDir: "SystemAO/disk/space/finder.html",
  38. RequireAdmin: false,
  39. })
  40. if *allow_hardware_management {
  41. //Displaying remaining space on disk, only enabled when allow hardware is true
  42. registerSetting(settingModule{
  43. Name: "Disk Space",
  44. Desc: "System Storage Space on Disks",
  45. IconPath: "SystemAO/disk/space/img/small_icon.png",
  46. Group: "Disk",
  47. StartDir: "SystemAO/disk/space/diskspace.html",
  48. RequireAdmin: false,
  49. })
  50. }
  51. //Register Disk SMART services
  52. if sudo_mode {
  53. //Create a new admin router
  54. adminRouter := prout.NewModuleRouter(prout.RouterOption{
  55. ModuleName: "System Setting",
  56. AdminOnly: true,
  57. UserHandler: userHandler,
  58. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  59. sendErrorResponse(w, "Permission Denied")
  60. },
  61. })
  62. /*
  63. SMART Listener
  64. Handle disk SMART and disk information
  65. See disk/SMART for more information
  66. */
  67. if *allow_hardware_management {
  68. smartListener, err := smart.NewSmartListener()
  69. if err != nil {
  70. //Listener creation failed
  71. log.Println("Failed to create SMART listener: " + err.Error())
  72. } else {
  73. //Listener created. Register endpoints
  74. //Register as a system setting
  75. registerSetting(settingModule{
  76. Name: "Disk SMART",
  77. Desc: "HardDisk Health Checking",
  78. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  79. Group: "Disk",
  80. StartDir: "SystemAO/disk/smart/smart.html",
  81. RequireAdmin: true,
  82. })
  83. /*
  84. registerSetting(settingModule{
  85. Name: "SMART Log",
  86. Desc: "HardDisk Health Log",
  87. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  88. Group: "Disk",
  89. StartDir: "SystemAO/disk/smart/log.html",
  90. RequireAdmin: true,
  91. })
  92. */
  93. adminRouter.HandleFunc("/system/disk/smart/getSMART", smartListener.GetSMART)
  94. adminRouter.HandleFunc("/system/disk/smart/getSMARTTable", smartListener.CheckDiskTable)
  95. adminRouter.HandleFunc("/system/disk/smart/getLogInfo", smartListener.CheckDiskTestStatus)
  96. }
  97. }
  98. /*
  99. Disk Manager Initialization
  100. See disk/diskmg.go for more details
  101. For setting register, see setting.advance.go
  102. */
  103. if *allow_hardware_management {
  104. adminRouter.HandleFunc("/system/disk/diskmg/view", diskmg.HandleView)
  105. adminRouter.HandleFunc("/system/disk/diskmg/platform", diskmg.HandlePlatform)
  106. adminRouter.HandleFunc("/system/disk/diskmg/mount", func(w http.ResponseWriter, r *http.Request) {
  107. //Mount option require passing in all filesystem handlers
  108. diskmg.HandleMount(w, r, fsHandlers)
  109. })
  110. adminRouter.HandleFunc("/system/disk/diskmg/format", func(w http.ResponseWriter, r *http.Request) {
  111. //Format option require passing in all filesystem handlers
  112. diskmg.HandleFormat(w, r, fsHandlers)
  113. })
  114. adminRouter.HandleFunc("/system/disk/diskmg/mpt", diskmg.HandleListMountPoints)
  115. }
  116. }
  117. }