disk.go 4.2 KB

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