added functionality
This commit is contained in:
parent
6dc7d6a033
commit
860bd085e3
6
.gitignore
vendored
6
.gitignore
vendored
@ -5,3 +5,9 @@ Cargo.lock
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
.gitignore
|
.gitignore
|
||||||
/.database
|
/.database
|
||||||
|
/websites/Servers
|
||||||
|
/websites/BitBurner
|
||||||
|
start.sh
|
||||||
|
TODO.md
|
||||||
|
/server
|
||||||
|
/servers_old
|
@ -6,7 +6,8 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
rusqlite = "0.28.0"
|
rusqlite = "0.28.0"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
|
sha256 = "1.1.1"
|
||||||
|
|
||||||
[dependencies.rocket]
|
[dependencies.rocket]
|
||||||
version = "0.5.0-rc.2"
|
version = "0.5.0-rc.2"
|
||||||
features = ["json"]
|
features = ["json", "tls"]
|
@ -5,11 +5,15 @@ workers = 4
|
|||||||
max_blocking = 512
|
max_blocking = 512
|
||||||
keep_alive = 5
|
keep_alive = 5
|
||||||
ident = "Rocket"
|
ident = "Rocket"
|
||||||
log_level = "critical"
|
log_level = "normal"
|
||||||
temp_dir = "/tmp"
|
temp_dir = "/tmp"
|
||||||
cli_colors = true
|
cli_colors = true
|
||||||
## NOTE: Don't (!) use this key! Generate your own!
|
## NOTE: Don't (!) use this key! Generate your own!
|
||||||
secret_key = "abcdefghijklmnop"
|
secret_key = "n@Rz%H4ORaf2u*H@yWtoSwRC0qf%t&yjRhmb30A7Y4IEWGMl50"
|
||||||
|
|
||||||
|
[global.tls]
|
||||||
|
certs = "/etc/letsencrypt/live/arlofilley.com/fullchain.pem"
|
||||||
|
key = "/etc/letsencrypt/live/arlofilley.com/privkey.pem"
|
||||||
|
|
||||||
[default.limits]
|
[default.limits]
|
||||||
form = "64 kB"
|
form = "64 kB"
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
87
src/main.rs
87
src/main.rs
@ -6,35 +6,48 @@
|
|||||||
//! - move structures into a different file
|
//! - move structures into a different file
|
||||||
//! - find a way to make logging in more secure (password hashes?)
|
//! - find a way to make logging in more secure (password hashes?)
|
||||||
|
|
||||||
|
use rocket::fairing::{Fairing, Info, Kind};
|
||||||
|
use rocket::http::Header;
|
||||||
|
use rocket::{Request, Response};
|
||||||
|
|
||||||
|
pub struct CORS;
|
||||||
|
|
||||||
|
#[rocket::async_trait]
|
||||||
|
impl Fairing for CORS {
|
||||||
|
fn info(&self) -> Info {
|
||||||
|
Info {
|
||||||
|
name: "Add CORS headers to responses",
|
||||||
|
kind: Kind::Response,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn on_response<'r>(&self, _request: &'r Request<'_>, response: &mut Response<'r>) {
|
||||||
|
response.set_header(Header::new("Access-Control-Allow-Origin", "*"));
|
||||||
|
response.set_header(Header::new(
|
||||||
|
"Access-Control-Allow-Methods",
|
||||||
|
"POST, GET, PATCH, OPTIONS",
|
||||||
|
));
|
||||||
|
response.set_header(Header::new("Access-Control-Allow-Headers", "*"));
|
||||||
|
response.set_header(Header::new("Access-Control-Allow-Credentials", "true"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Imports for rocket
|
// Imports for rocket
|
||||||
#[macro_use] extern crate rocket;
|
#[macro_use]
|
||||||
|
extern crate rocket;
|
||||||
use rocket::{
|
use rocket::{
|
||||||
Rocket,
|
fs::{relative, FileServer},
|
||||||
Build,
|
Build, Rocket,
|
||||||
fs::{
|
|
||||||
FileServer,
|
|
||||||
relative
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mod typing;
|
|
||||||
mod servers;
|
mod servers;
|
||||||
|
mod typing;
|
||||||
|
|
||||||
use crate::typing::sql::*;
|
use crate::servers::server::{server, server_info};
|
||||||
use crate::typing::user::{
|
|
||||||
get_tests,
|
|
||||||
login,
|
|
||||||
sign_up
|
|
||||||
};
|
|
||||||
use crate::typing::test::{
|
|
||||||
create_test,
|
|
||||||
new_test
|
|
||||||
};
|
|
||||||
use crate::typing::leaderboard::leaderboard;
|
use crate::typing::leaderboard::leaderboard;
|
||||||
use crate::servers::server::{
|
use crate::typing::sql::*;
|
||||||
server,
|
use crate::typing::test::{create_test, new_test};
|
||||||
server_info
|
use crate::typing::user::{get_tests, login, sign_up};
|
||||||
};
|
|
||||||
|
|
||||||
// Imports for sql, see sql.rs for more information
|
// Imports for sql, see sql.rs for more information
|
||||||
|
|
||||||
@ -45,28 +58,34 @@ fn test() -> String {
|
|||||||
String::from("Hello World!")
|
String::from("Hello World!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// The main function which builds and launches the
|
/// The main function which builds and launches the
|
||||||
/// webserver with all appropriate routes and fileservers
|
/// webserver with all appropriate routes and fileservers
|
||||||
#[launch]
|
#[launch]
|
||||||
fn rocket() -> Rocket<Build> {
|
fn rocket() -> Rocket<Build> {
|
||||||
rocket::build()
|
rocket::build()
|
||||||
|
.attach(CORS)
|
||||||
// testing only, should return "Hello world"
|
// testing only, should return "Hello world"
|
||||||
.mount("/test", routes![test])
|
.mount("/test", routes![test])
|
||||||
// hosts the api routes necessary for the website
|
// hosts the api routes necessary for the website
|
||||||
// to interact with the database
|
// to interact with the database
|
||||||
.mount("/api", routes![
|
.mount(
|
||||||
create_database, sign_up,
|
"/api",
|
||||||
create_test, login, get_tests,
|
routes![
|
||||||
leaderboard, new_test,
|
create_database,
|
||||||
])
|
sign_up,
|
||||||
|
create_test,
|
||||||
.mount("/api", routes![
|
login,
|
||||||
server, server_info
|
get_tests,
|
||||||
])
|
leaderboard,
|
||||||
|
new_test,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.mount("/api", routes![server, server_info])
|
||||||
// hosts the fileserver
|
// hosts the fileserver
|
||||||
.mount("/typing", FileServer::from(relative!("websites/Typing")))
|
.mount("/typing", FileServer::from(relative!("websites/Typing")))
|
||||||
.mount("/servers", FileServer::from(relative!("websites/Servers")))
|
.mount("/servers", FileServer::from(relative!("websites/Servers")))
|
||||||
|
.mount(
|
||||||
|
"/BitBurner",
|
||||||
|
FileServer::from(relative!("websites/BitBurner")),
|
||||||
|
)
|
||||||
}
|
}
|
@ -1,21 +1,11 @@
|
|||||||
use rocket::serde::{
|
use rocket::serde::{
|
||||||
json::{
|
json::{from_str, to_string, Json},
|
||||||
Json,
|
Deserialize, Serialize,
|
||||||
to_string, from_str
|
|
||||||
},
|
|
||||||
Deserialize,
|
|
||||||
Serialize
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
io::{
|
fs::{read_dir, File},
|
||||||
Write,
|
io::{Read, Write},
|
||||||
Read
|
|
||||||
},
|
|
||||||
fs::{
|
|
||||||
File,
|
|
||||||
read_dir,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Clone, Debug)]
|
#[derive(Deserialize, Serialize, Clone, Debug)]
|
||||||
@ -26,7 +16,7 @@ struct Process {
|
|||||||
run_time: String,
|
run_time: String,
|
||||||
id: String,
|
id: String,
|
||||||
user_id: String,
|
user_id: String,
|
||||||
virtual_memory: String
|
virtual_memory: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Clone, Debug)]
|
#[derive(Deserialize, Serialize, Clone, Debug)]
|
||||||
@ -37,7 +27,15 @@ struct Disk {
|
|||||||
total_space: String,
|
total_space: String,
|
||||||
available_space: String,
|
available_space: String,
|
||||||
usage: String,
|
usage: String,
|
||||||
file_system: String
|
file_system: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Clone, Debug)]
|
||||||
|
#[serde(crate = "rocket::serde")]
|
||||||
|
struct CPU {
|
||||||
|
core_count: String,
|
||||||
|
cache: String,
|
||||||
|
clock_speed: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
@ -57,11 +55,12 @@ pub struct System {
|
|||||||
swap_usage: String,
|
swap_usage: String,
|
||||||
disks: Vec<Disk>,
|
disks: Vec<Disk>,
|
||||||
processes: Vec<Process>,
|
processes: Vec<Process>,
|
||||||
|
cpu: CPU,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/servers", data = "<data>")]
|
#[post("/servers", data = "<data>")]
|
||||||
pub fn server(data: Json<System>) {
|
pub fn server(data: Json<System>) {
|
||||||
if data.key == "0etnmXPSr95@FNy6A3U9Bw*ZupNIR85zI!hRFGIdj6SW$Tu0q%" {
|
if data.key == "0etnmXPSr95@FNy6A3U9Bw*ZupNIR85zI!hRFGIdj6SW$T" {
|
||||||
println!("Data From : {}", data.host_name);
|
println!("Data From : {}", data.host_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,6 +87,7 @@ pub fn server(data: Json<System>) {
|
|||||||
swap_usage: format!("{}", data.swap_usage),
|
swap_usage: format!("{}", data.swap_usage),
|
||||||
disks: data.disks.clone(),
|
disks: data.disks.clone(),
|
||||||
processes: data.processes.clone(),
|
processes: data.processes.clone(),
|
||||||
|
cpu: data.cpu.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let string = match to_string(&data) {
|
let string = match to_string(&data) {
|
||||||
@ -98,10 +98,7 @@ pub fn server(data: Json<System>) {
|
|||||||
Ok(string) => string,
|
Ok(string) => string,
|
||||||
};
|
};
|
||||||
|
|
||||||
let write = file.write_all(
|
let write = file.write_all(string.as_bytes());
|
||||||
string
|
|
||||||
.as_bytes()
|
|
||||||
);
|
|
||||||
|
|
||||||
match write {
|
match write {
|
||||||
Err(why) => println!("Error {why}"),
|
Err(why) => println!("Error {why}"),
|
||||||
@ -116,7 +113,7 @@ pub fn server_info() -> Json<Vec<System>> {
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
println!("Error: {why}");
|
println!("Error: {why}");
|
||||||
read_dir("./server/").unwrap()
|
read_dir("./server/").unwrap()
|
||||||
},
|
}
|
||||||
Ok(dir) => dir,
|
Ok(dir) => dir,
|
||||||
};
|
};
|
||||||
let mut file: File;
|
let mut file: File;
|
||||||
@ -128,9 +125,10 @@ pub fn server_info() -> Json<Vec<System>> {
|
|||||||
Err(ref why) => {
|
Err(ref why) => {
|
||||||
println!("Error: {why}");
|
println!("Error: {why}");
|
||||||
path.unwrap()
|
path.unwrap()
|
||||||
},
|
}
|
||||||
Ok(path) => path
|
Ok(path) => path,
|
||||||
}.path();
|
}
|
||||||
|
.path();
|
||||||
|
|
||||||
file = match File::open(format!("{}", path.display())) {
|
file = match File::open(format!("{}", path.display())) {
|
||||||
Err(why) => {
|
Err(why) => {
|
||||||
|
@ -26,7 +26,7 @@ pub struct User<'r> {
|
|||||||
pub fn sign_up(user: Json<User<'_>>) {
|
pub fn sign_up(user: Json<User<'_>>) {
|
||||||
create_user(
|
create_user(
|
||||||
user.username,
|
user.username,
|
||||||
user.password
|
&sha256::digest(user.password),
|
||||||
).expect("Error: Couldn't create new user");
|
).expect("Error: Couldn't create new user");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ pub fn get_tests(user_id: u32) -> Json<Vec<Test>> {
|
|||||||
/// Accessible from http://url/api/login
|
/// Accessible from http://url/api/login
|
||||||
#[get("/login/<username>/<password>")]
|
#[get("/login/<username>/<password>")]
|
||||||
pub fn login(username: &str, password: &str) -> String {
|
pub fn login(username: &str, password: &str) -> String {
|
||||||
let user_id = find_user(username, password).expect("error finding user_id");
|
let user_id = find_user(username, &sha256::digest(password)).expect("error finding user_id");
|
||||||
user_id.to_string()
|
user_id.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,19 +1,31 @@
|
|||||||
:root {
|
:root {
|
||||||
--navbar: #52b2cf;
|
--navbar: #333333;
|
||||||
--navbar-button: #283F3B;
|
|
||||||
--background: #7EC4CF;
|
/* Navbar Button Properties */
|
||||||
|
--navbar-button: #058ED9;
|
||||||
|
--navbar-button-hover: #283F3B;
|
||||||
|
--navbar-button-border: #058ED9;
|
||||||
|
|
||||||
|
/* */
|
||||||
|
--background: #1f1f1f;
|
||||||
|
|
||||||
|
/* Table Properties*/
|
||||||
--table: #FFD07B;
|
--table: #FFD07B;
|
||||||
--table-top:#FDB833;
|
--table-top:#FDB833;
|
||||||
--title: #296EB4;
|
|
||||||
|
/* Title Properties */
|
||||||
|
--title-background: #333333;
|
||||||
|
--title-text: #ffffff;
|
||||||
|
|
||||||
|
/* General Properties */
|
||||||
--text: #000000;
|
--text: #000000;
|
||||||
--border: #000000;
|
--border: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||||
font-size: medium;
|
font-size: medium;
|
||||||
margin: 0px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div {
|
div {
|
||||||
@ -25,59 +37,118 @@ div {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
color:black;
|
color: var(--title-text);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#all, #systems {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
#navbar {
|
#navbar {
|
||||||
width: 100%;
|
padding: 20px 0 0 10px;
|
||||||
|
height: 96%;
|
||||||
|
width: 15%;
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
|
||||||
background: var(--navbar);
|
background: var(--navbar);
|
||||||
border: 1px black solid;
|
border-radius: 10px;
|
||||||
padding: 5px;
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#navbar h2 {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#systems {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar #option-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar #option-buttons button {
|
||||||
|
background-color: #32DE8A;
|
||||||
|
border-color: #32DE8A;
|
||||||
}
|
}
|
||||||
|
|
||||||
#navbar button {
|
#navbar button {
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
border-radius: 8px;
|
||||||
background-color: var(--navbar-button);
|
background-color: var(--navbar-button);
|
||||||
color: wheat;
|
margin-bottom: 8px;
|
||||||
border: 3px black solid;
|
color: var(--text);
|
||||||
padding: 15px;
|
border: none;
|
||||||
|
padding: 10px;
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
#navbar button:focus {
|
#navbar button:hover, #navbar #option-buttons button:hover {
|
||||||
background-color: #23296c;
|
box-shadow:
|
||||||
|
0 12px 16px 0 rgba(0,0,0,0.24),
|
||||||
|
0 17px 50px 0 rgba(0,0,0,0.19);
|
||||||
|
transition-duration: 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#navbar #allSystemsButton {
|
||||||
|
background-color: #4d23a8;
|
||||||
|
width: 97%;
|
||||||
|
padding: 36px;
|
||||||
|
color: #FFE3E3;
|
||||||
|
font-size: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar #allSystemsButton:hover, #navbar #allSystemsButton:focus {
|
||||||
|
background-color: #3E1C87;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar #option-buttons button:hover, #navbar #option-buttons button:focus {
|
||||||
|
background-color: #1DAF68;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#navbar button:hover {
|
#navbar button:hover {
|
||||||
background-color: #fc9e4f;
|
background-color: #04699F;
|
||||||
color: var(--text);
|
|
||||||
border: 3px var(--border) solid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#SystemDiv {
|
#SystemName {
|
||||||
background: var(--title);
|
background: var(--title-background);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-family:system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
font-family:
|
||||||
|
system-ui, -apple-system, BlinkMacSystemFont,
|
||||||
|
'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,
|
||||||
|
'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
border-bottom: black 1px solid;
|
|
||||||
|
width: 84%;
|
||||||
|
margin-left: 16%;
|
||||||
|
border-radius: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#system {
|
#tables {
|
||||||
margin: 0px;
|
display: block;
|
||||||
|
width: 84%;
|
||||||
|
margin-left: 15%;
|
||||||
|
padding: 10px 0 0 20px;
|
||||||
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
border: 2px black solid;
|
|
||||||
margin: 0px;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 0px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
border-spacing: 0px;
|
||||||
|
border: 2px var(--border) solid;
|
||||||
|
border-radius: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table tr:nth-child(n) {
|
table tr:nth-child(n) {
|
||||||
@ -89,11 +160,10 @@ table tr:nth-child(1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tr {
|
tr {
|
||||||
border: 1px black solid;
|
border: 1px black dotted;
|
||||||
}
|
}
|
||||||
|
|
||||||
td {
|
td {
|
||||||
border: 1px black solid;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
|
@ -7,25 +7,40 @@
|
|||||||
<title id="title">Leaderboard</title>
|
<title id="title">Leaderboard</title>
|
||||||
<link rel="stylesheet" href="index.css">
|
<link rel="stylesheet" href="index.css">
|
||||||
<script src="index.js" defer="true"></script>
|
<script src="index.js" defer="true"></script>
|
||||||
|
<script src="cpu.js" defer="true"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="SystemDiv"><h1 id="system">Typing Leaderboard</h1></div>
|
|
||||||
<div id="navbar">
|
<div id="navbar">
|
||||||
<div id="allButton">
|
<div id="allButton">
|
||||||
<button id="all">all</button>
|
<button id="allSystemsButton">All Systems</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="systems">
|
|
||||||
<button>Arch</button>
|
<h2>Options</h2>
|
||||||
</div>
|
<div id="option-buttons">
|
||||||
</div>
|
|
||||||
<div id="navbar">
|
|
||||||
<button id="systeminfo">System</button>
|
<button id="systeminfo">System</button>
|
||||||
<button id="Disks Header">Disks</button>
|
<button id="Disks Header">Disks</button>
|
||||||
<button id="Processes Header">Processes</button>
|
<button id="Processes Header">Processes</button>
|
||||||
|
<button id="CPU Header">CPU</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h2>Systems</h2>
|
||||||
|
<div id="systems"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="SystemName">
|
||||||
|
<h1 id="system">
|
||||||
|
Loading...
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="tables">
|
||||||
|
<div id="allSystemInfo" align="center"></div>
|
||||||
<div id="systemInfo" align="center"></div>
|
<div id="systemInfo" align="center"></div>
|
||||||
<div id="disks" align="center"></div>
|
<div id="disks" align="center"></div>
|
||||||
<div id="processes" align="center"></div>
|
<div id="processes" align="center"></div>
|
||||||
|
<div id="CPU" align="center"></div>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,34 +1,94 @@
|
|||||||
|
|
||||||
get();
|
get();
|
||||||
let disks = false;
|
let disks = false;
|
||||||
let processes = false;
|
let processes = false;
|
||||||
let sysinfo = true;
|
let sysinfo = true;
|
||||||
|
let allSysInfo = false;
|
||||||
|
let cpu = false;
|
||||||
let json;
|
let json;
|
||||||
let server = 0;
|
let server = 0;
|
||||||
|
|
||||||
setInterval(get, 5000);
|
setInterval(get, 5000);
|
||||||
function get() {
|
function get() {
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', 'http://arlofilley.com/api/server_info');
|
xhr.open('GET', 'https://arlofilley.com/api/server_info');
|
||||||
xhr.setRequestHeader('Content-Type', 'application/json');
|
xhr.setRequestHeader('Content-Type', 'application/json');
|
||||||
xhr.responseType = 'json';
|
xhr.responseType = 'json';
|
||||||
xhr.send();
|
xhr.send();
|
||||||
xhr.onload = () => {
|
xhr.onload = () => {
|
||||||
json = xhr.response
|
json = xhr.response
|
||||||
createElements(json[server]);
|
createElements(json);
|
||||||
createButtons(json);
|
createButtons(json);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function reset_tables() {
|
||||||
|
disks = false;
|
||||||
|
processes = false;
|
||||||
|
sysinfo = false;
|
||||||
|
allSysInfo = false;
|
||||||
|
cpu = false;
|
||||||
|
}
|
||||||
|
|
||||||
function createElements(pJson) {
|
function createElements(pJson) {
|
||||||
let title = document.getElementById(`system`);
|
let title = document.getElementById(`system`);
|
||||||
title.textContent = pJson.host_name;
|
title.textContent = pJson[server].host_name;
|
||||||
document.title = pJson.host_name;
|
document.title = pJson[server].host_name;
|
||||||
|
|
||||||
createProcesses(pJson);
|
createAllSystemInfo(pJson);
|
||||||
createDisks(pJson);
|
createProcesses(pJson[server]);
|
||||||
createSystemInfo(pJson);
|
createDisks(pJson[server]);
|
||||||
|
createSystemInfo(pJson[server]);
|
||||||
|
create_cpu_table(pJson[server], cpu);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function createAllSystemInfo(systems) {
|
||||||
|
let div = document.getElementById(`allSystemInfo`)
|
||||||
|
|
||||||
|
|
||||||
|
while (div.firstChild) {
|
||||||
|
div.removeChild(div.firstChild)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allSysInfo) return;
|
||||||
|
|
||||||
|
document.title = "All Systems"
|
||||||
|
let title = document.getElementById('system');
|
||||||
|
title.textContent = "All Systems"
|
||||||
|
|
||||||
|
let table = document.createElement(`table`);
|
||||||
|
let tableBody = document.createElement(`tbody`);
|
||||||
|
table.appendChild(tableBody);
|
||||||
|
let tr = document.createElement(`tr`);
|
||||||
|
tableBody.appendChild(tr)
|
||||||
|
|
||||||
|
create_table_element(
|
||||||
|
tr,
|
||||||
|
"",
|
||||||
|
["Name", "OS", "Uptime", "Total Ram", "Used Ram",
|
||||||
|
"Available Ram", "Ram Usage", "Total Swap", "Used Swap",
|
||||||
|
"Available Swap", "Swap Usage"]
|
||||||
|
);
|
||||||
|
|
||||||
|
tableBody.appendChild(tr);
|
||||||
|
tr = document.createElement(`tr`);
|
||||||
|
|
||||||
|
for (let i = 0; i < systems.length; i++) {
|
||||||
|
let system = systems[i];
|
||||||
|
create_table_element(
|
||||||
|
tr,
|
||||||
|
"",
|
||||||
|
[`${system.host_name}`, `${system.os}`, `${system.uptime}`, `${system.total_ram}`,
|
||||||
|
`${system.used_ram}`, `${system.available_ram}`, `${system.ram_usage}%`, `${system.total_swap}`,
|
||||||
|
`${system.used_swap}`, `${system.available_swap}`, `${system.swap_usage}%`]
|
||||||
|
)
|
||||||
|
tableBody.appendChild(tr);
|
||||||
|
tr = document.createElement(`tr`);
|
||||||
|
}
|
||||||
|
div.appendChild(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function createSystemInfo(pJson) {
|
function createSystemInfo(pJson) {
|
||||||
let div = document.getElementById(`systemInfo`);
|
let div = document.getElementById(`systemInfo`);
|
||||||
|
|
||||||
@ -45,65 +105,23 @@ function createSystemInfo(pJson) {
|
|||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
|
|
||||||
let td = document.createElement('td');
|
create_table_element(
|
||||||
td.appendChild(document.createTextNode(`Name`));
|
tr,
|
||||||
tr.appendChild(td);
|
"",
|
||||||
td = document.createElement('td');
|
["Name", "OS", "Uptime", "Total Ram", "Used Ram",
|
||||||
td.appendChild(document.createTextNode(`OS`));
|
"Available Ram", "Ram Usage", "Total Swap", "Used Swap",
|
||||||
tr.appendChild(td);
|
"Available Swap", "Swap Usage"]
|
||||||
td = document.createElement('td');
|
);
|
||||||
td.appendChild(document.createTextNode(`Uptime`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Total Ram`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Used Ram`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Available Ram`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Total Swap`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Used Swap`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Available Swap`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
|
|
||||||
td = document.createElement('td');
|
create_table_element(
|
||||||
td.appendChild(document.createTextNode(pJson.host_name));
|
tr,
|
||||||
tr.appendChild(td);
|
"",
|
||||||
td = document.createElement('td');
|
[`${pJson.host_name}`, `${pJson.os}`, `${pJson.uptime}`, `${pJson.total_ram}`,
|
||||||
td.appendChild(document.createTextNode(pJson.os));
|
`${pJson.used_ram}`, `${pJson.available_ram}`, `${pJson.ram_usage}%`, `${pJson.total_swap}`,
|
||||||
tr.appendChild(td);
|
`${pJson.used_swap}`, `${pJson.available_swap}`, `${pJson.swap_usage}%`]
|
||||||
td = document.createElement('td');
|
);
|
||||||
td.appendChild(document.createTextNode(pJson.uptime));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.total_ram));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.used_ram));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.available_ram));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.total_swap));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.used_swap));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(pJson.available_swap));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
|
|
||||||
@ -126,51 +144,24 @@ function createProcesses(pJson) {
|
|||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
|
|
||||||
let td = document.createElement('td');
|
create_table_element(
|
||||||
td.appendChild(document.createTextNode(`Name`));
|
tr,
|
||||||
tr.appendChild(td);
|
"",
|
||||||
td = document.createElement('td');
|
["Name", "Memory", "Run Time", "Process ID",
|
||||||
td.appendChild(document.createTextNode(`Memory`));
|
"User ID", "Virtual Memory"]
|
||||||
tr.appendChild(td);
|
);
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Run Time`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Process ID`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`User ID`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Virtual Memory`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
|
|
||||||
for (let i = 0; i < pJson.processes.length; i++) {
|
for (let i = 0; i < pJson.processes.length; i++) {
|
||||||
td = document.createElement('td');
|
let process = pJson.processes[i];
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].name}`));
|
create_table_element(
|
||||||
tr.appendChild(td);
|
tr,
|
||||||
|
"",
|
||||||
td = document.createElement('td');
|
[`${process.name}`, `${process.memory}`, `${process.run_time}`, `${process.id}`,
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].memory}`));
|
`${process.user_id}`, `${process.virtual_memory}`]
|
||||||
tr.appendChild(td);
|
)
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].run_time}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].id}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].user_id}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.processes[i].virtual_memory}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
@ -194,83 +185,74 @@ function createDisks(pJson) {
|
|||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
|
|
||||||
let td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Name`));
|
create_table_element(
|
||||||
tr.appendChild(td);
|
tr,
|
||||||
td = document.createElement('td');
|
"",
|
||||||
td.appendChild(document.createTextNode(`Type`));
|
["Name", "Type", "Total Space", "Available Space",
|
||||||
tr.appendChild(td);
|
"Usage","File System"]
|
||||||
td = document.createElement('td');
|
);
|
||||||
td.appendChild(document.createTextNode(`Total Space`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Available Space`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`Usage`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`File System`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
|
|
||||||
for (let i = 0; i < pJson.disks.length; i++) {
|
for (let i = 0; i < pJson.disks.length; i++) {
|
||||||
td = document.createElement('td');
|
let disk = pJson.disks[i];
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].name}`));
|
create_table_element(
|
||||||
tr.appendChild(td);
|
tr,
|
||||||
|
"",
|
||||||
td = document.createElement('td');
|
[`${disk.name}`, `${disk.disk_type}`, `${disk.total_space}`,
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].disk_type}`));
|
`${disk.available_space}`, `${disk.usage}%`, `${disk.file_system}`]
|
||||||
tr.appendChild(td);
|
)
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].total_space}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].available_space}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].usage}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
td = document.createElement('td');
|
|
||||||
td.appendChild(document.createTextNode(`${pJson.disks[i].file_system}`));
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
tableBody.appendChild(tr);
|
tableBody.appendChild(tr);
|
||||||
tr = document.createElement('tr');
|
tr = document.createElement('tr');
|
||||||
}
|
}
|
||||||
div.appendChild(table);
|
div.appendChild(table);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function create_table_element(tr, string, elements) {
|
||||||
|
if (elements.length > 0) {
|
||||||
|
for (let i = 0; i < elements.length; i++) {
|
||||||
|
let td = document.createElement('td');
|
||||||
|
td.appendChild(document.createTextNode(elements[i]));
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let td = document.createElement('td');
|
||||||
|
td.appendChild(document.createTextNode(string));
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
b = document.getElementById("Processes Header");
|
b = document.getElementById("Processes Header");
|
||||||
b.addEventListener("click", () => {
|
b.addEventListener("click", () => {
|
||||||
|
reset_tables();
|
||||||
processes = true;
|
processes = true;
|
||||||
disks = false;
|
createElements(json);
|
||||||
sysinfo = false;
|
|
||||||
createElements(json[server]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
c = document.getElementById("systeminfo");
|
c = document.getElementById("systeminfo");
|
||||||
c.addEventListener("click", () => {
|
c.addEventListener("click", () => {
|
||||||
processes = false;
|
reset_tables();
|
||||||
disks = false;
|
|
||||||
sysinfo = true;
|
sysinfo = true;
|
||||||
createElements(json[server]);
|
createElements(json);
|
||||||
});
|
});
|
||||||
let button = document.getElementById
|
let button = document.getElementById
|
||||||
|
|
||||||
e = document.getElementById("Disks Header");
|
e = document.getElementById("Disks Header");
|
||||||
e.addEventListener("click", () => {
|
e.addEventListener("click", () => {
|
||||||
|
reset_tables();
|
||||||
disks = true;
|
disks = true;
|
||||||
processes = false;
|
createElements(json);
|
||||||
sysinfo = false;
|
|
||||||
createElements(json[server]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
f = document.getElementById("allSystemsButton");
|
||||||
|
f.addEventListener("click", () => {
|
||||||
|
reset_tables();
|
||||||
|
allSysInfo = true;
|
||||||
|
createElements(json);
|
||||||
|
})
|
||||||
|
|
||||||
function createButtons(pJson) {
|
function createButtons(pJson) {
|
||||||
let div = document.getElementById("systems");
|
let div = document.getElementById("systems");
|
||||||
|
|
||||||
@ -282,14 +264,13 @@ function createButtons(pJson) {
|
|||||||
let system = pJson[i];
|
let system = pJson[i];
|
||||||
|
|
||||||
let button = document.createElement("button");
|
let button = document.createElement("button");
|
||||||
button.textContent = system.host_name.toUpperCase();
|
button.textContent = system.host_name;
|
||||||
button.id = i;
|
button.id = i;
|
||||||
button.addEventListener("click", () => {
|
button.addEventListener("click", () => {
|
||||||
disks = false;
|
reset_tables();
|
||||||
processes = false;
|
|
||||||
sysinfo = true;
|
sysinfo = true;
|
||||||
server = button.id
|
server = button.id
|
||||||
createElements(json[button.id]);
|
createElements(json);
|
||||||
});
|
});
|
||||||
div.appendChild(button);
|
div.appendChild(button);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
class API {
|
class API {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.url = "http://arlofilley.com/api/";
|
this.url = "https://arlofilley.com/api/";
|
||||||
// this is the url of the server
|
// this is the url of the server
|
||||||
// this may have to change later on
|
// this may have to change later on
|
||||||
}
|
}
|
||||||
@ -284,7 +284,7 @@ class API {
|
|||||||
|
|
||||||
getTest() {
|
getTest() {
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', `${this.url}get_test/`);
|
xhr.open('GET', `${this.url}new_test/`);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
xhr.onload = () =>{
|
xhr.onload = () =>{
|
||||||
const effectiveWidth = (windowWidth - 200) / 13;
|
const effectiveWidth = (windowWidth - 200) / 13;
|
||||||
|
Loading…
Reference in New Issue
Block a user