done dashboard
This commit is contained in:
+76
-1
@@ -1,11 +1,25 @@
|
||||
package com.sisvietnamvn.web.controller.manage;
|
||||
|
||||
import com.sisvietnamvn.web.domain.Post;
|
||||
import com.sisvietnamvn.web.domain.PageStatus;
|
||||
import com.sisvietnamvn.web.repository.PostRepository;
|
||||
import com.sisvietnamvn.web.repository.PageRepository;
|
||||
import com.sisvietnamvn.web.service.PostService;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.sisvietnamvn.web.security.AuthoritiesConstants;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import com.sun.management.OperatingSystemMXBean;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Controller for the admin dashboard index page.
|
||||
* Serves the main "/manage" landing page.
|
||||
@@ -15,8 +29,69 @@ import com.sisvietnamvn.web.security.AuthoritiesConstants;
|
||||
@PreAuthorize("hasAnyAuthority(\"" + AuthoritiesConstants.ADMIN + "\", \"" + AuthoritiesConstants.EDITOR + "\", \"" + AuthoritiesConstants.AUTHOR + "\", \"" + AuthoritiesConstants.CONTRIBUTOR + "\", \"" + AuthoritiesConstants.SUBSCRIBER + "\", \"" + AuthoritiesConstants.USER + "\")")
|
||||
public class ManageDashboardController {
|
||||
|
||||
private final PostRepository postRepository;
|
||||
private final PageRepository pageRepository;
|
||||
private final PostService postService;
|
||||
|
||||
public ManageDashboardController(PostRepository postRepository, PageRepository pageRepository, PostService postService) {
|
||||
this.postRepository = postRepository;
|
||||
this.pageRepository = pageRepository;
|
||||
this.postService = postService;
|
||||
}
|
||||
|
||||
@GetMapping({"", "/"})
|
||||
public String index() {
|
||||
public String index(Model model) {
|
||||
// At a Glance stats
|
||||
long postCount = postRepository.count();
|
||||
long pageCount = pageRepository.count();
|
||||
model.addAttribute("postCount", postCount);
|
||||
model.addAttribute("pageCount", pageCount);
|
||||
|
||||
// Recent Activity (Top 5 posts)
|
||||
List<Post> recentPosts = postRepository.findAllByOrderByCreatedDateDesc().stream()
|
||||
.limit(5)
|
||||
.collect(Collectors.toList());
|
||||
model.addAttribute("recentPosts", recentPosts);
|
||||
|
||||
// Telemetry Stats
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
long totalRam = runtime.totalMemory();
|
||||
long freeRam = runtime.freeMemory();
|
||||
long usedRam = totalRam - freeRam;
|
||||
int ramPercentage = totalRam > 0 ? (int) ((usedRam * 100.0f) / totalRam) : 0;
|
||||
model.addAttribute("ramPercentage", ramPercentage);
|
||||
model.addAttribute("usedRamMb", usedRam / (1024 * 1024));
|
||||
model.addAttribute("totalRamMb", totalRam / (1024 * 1024));
|
||||
|
||||
File root = new File("/");
|
||||
long totalSpace = root.getTotalSpace();
|
||||
long freeSpace = root.getUsableSpace();
|
||||
long usedSpace = totalSpace - freeSpace;
|
||||
int ioPercentage = totalSpace > 0 ? (int) ((usedSpace * 100.0f) / totalSpace) : 0;
|
||||
model.addAttribute("ioPercentage", ioPercentage);
|
||||
model.addAttribute("usedSpaceGb", usedSpace / (1024 * 1024 * 1024));
|
||||
model.addAttribute("totalSpaceGb", totalSpace / (1024 * 1024 * 1024));
|
||||
|
||||
try {
|
||||
OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
|
||||
double cpuLoad = osBean.getCpuLoad(); // returns 0.0 to 1.0. Returns < 0 if not available.
|
||||
int cpuPercentage = cpuLoad >= 0 ? (int) (cpuLoad * 100) : 0;
|
||||
model.addAttribute("cpuPercentage", cpuPercentage);
|
||||
} catch (Exception e) {
|
||||
model.addAttribute("cpuPercentage", 0);
|
||||
}
|
||||
|
||||
return "manage/index";
|
||||
}
|
||||
|
||||
@PostMapping("/quick-draft")
|
||||
public String quickDraft(@RequestParam("title") String title, @RequestParam("content") String content) {
|
||||
Post post = new Post();
|
||||
post.setTitle(title);
|
||||
post.setContent(content);
|
||||
post.setStatus(PageStatus.DRAFT);
|
||||
|
||||
postService.save(post);
|
||||
return "redirect:/manage";
|
||||
}
|
||||
}
|
||||
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.sisvietnamvn.web.controller.manage;
|
||||
|
||||
import com.sisvietnamvn.web.service.SettingService;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
import com.sisvietnamvn.web.security.AuthoritiesConstants;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Controller for the admin Updates page.
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping("/manage/updates")
|
||||
@PreAuthorize("hasAnyAuthority(\"" + AuthoritiesConstants.ADMIN + "\", \"" + AuthoritiesConstants.EDITOR + "\")")
|
||||
public class ManageUpdatesController {
|
||||
|
||||
private final SettingService settingService;
|
||||
private static final String LATEST_VERSION = "4.0.7";
|
||||
|
||||
public ManageUpdatesController(SettingService settingService) {
|
||||
this.settingService = settingService;
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public String updates(Model model) {
|
||||
Map<String, String> settings = settingService.getAllAsMap();
|
||||
String currentVersion = settings.getOrDefault("core_version", "4.0.6");
|
||||
|
||||
boolean updateAvailable = !LATEST_VERSION.equals(currentVersion);
|
||||
|
||||
model.addAttribute("coreVersionCurrent", currentVersion);
|
||||
model.addAttribute("coreVersionLatest", LATEST_VERSION);
|
||||
model.addAttribute("coreUpdateAvailable", updateAvailable);
|
||||
|
||||
// Plugin mock logic
|
||||
String pluginSeoVersion = settings.getOrDefault("plugin_seo_version", "1.0.0");
|
||||
model.addAttribute("pluginSeoVersion", pluginSeoVersion);
|
||||
model.addAttribute("pluginSeoUpdateAvailable", !"1.1.2".equals(pluginSeoVersion));
|
||||
|
||||
return "manage/updates";
|
||||
}
|
||||
|
||||
@PostMapping("/core")
|
||||
public String updateCore(RedirectAttributes redirectAttributes) {
|
||||
settingService.setValue("core_version", LATEST_VERSION);
|
||||
redirectAttributes.addFlashAttribute("successMessage", "System successfully updated to version " + LATEST_VERSION);
|
||||
return "redirect:/manage/updates";
|
||||
}
|
||||
|
||||
@PostMapping("/plugins")
|
||||
public String updatePlugins(RedirectAttributes redirectAttributes) {
|
||||
settingService.setValue("plugin_seo_version", "1.1.2");
|
||||
redirectAttributes.addFlashAttribute("successMessage", "Selected plugins successfully updated.");
|
||||
return "redirect:/manage/updates";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user