---
title: "HPC Monitoring"
date: '`r format(Sys.time(), "%m/%d/%y %X")`'
output:
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: scroll
source: embed
smart: false
navbar:
- { title: "NJIT HPC", href: "https://hpc.njit.edu"}
---
<style>
.navbar {
background-color:#cc0000;
}
.navbar-brand {
color:white!important;
}
.navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus {
color: #ffffff;
background-color: #1c1475;
font-weight: 900;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
background-color: #1c1475;
color: white;
}
</style>
```{r setup, include=F}
library(flexdashboard)
library(tidyverse)
library(lubridate)
library(dygraphs)
library(reshape2)
library(stringr)
library(plotly)
library(knitr)
library(xts)
library(DT)
options(DT.options = list(dom = 'ltip', pageLength = 10, lengthMenu = c(10, 100, 500, 1000), autoWidth = TRUE) )
node_load <- read_delim('load.csv',delim=";")
colnames(node_load) <- c("Nodes","Partition","CPUs","Load","Available Memory","Free Memory")
queue_status <- read_delim('queue.csv',delim=";" )
colnames(queue_status) = c("Job ID","Partition","Job Name","User","Allocation","State",
"Elapsed Time","Start Time","Submit Time","Time Requested","CPUs Requested",
"Nodes Requested","Memory/Core Requested","Nodelist","Reason","Priority","GPUs","QOS")
queue_status <- as_tibble(lapply(queue_status,trimws)) %>% mutate_at(c(1,11,12,16),as.integer)
#jobs_now <- as_tibble(lapply(queue_status,trimws)) %>% group_by(State) %>% summarize(Jobs=n()) %>% mutate(Time=now()) %>% spread(State,Jobs)
# If no PENDING jobs, then make sure that PENDING is added to jobs_now
tmp1 <- as_tibble(lapply(queue_status,trimws)) %>% group_by(State) %>% summarize(Jobs=n()) %>% mutate(Time=now()) %>% spread(State,Jobs)
tmp2 <- tibble(Time=tmp1$Time,PENDING=0,RUNNING=0)
jobs_now <- rbind(tmp1,tmp2) %>% group_by(Time) %>% summarize(PENDING=sum(PENDING),RUNNING=sum(RUNNING))
write_delim(jobs_now, gzfile('jobshistory.csv.gz'),delim=";", append = TRUE)
jobshistory <- read_delim('jobshistory.csv.gz',delim=";") %>% filter(Time >= today() %m-% months(12))
node_load %>%
separate(CPUs, c("Allocated","Idle","Drained","Total"),sep='/',convert=TRUE) -> clean_nodeload
clean_nodeload %>%
group_by(Partition=trimws(Partition)) %>%
summarize(
Nodes = sum(n()),
Cores = sum(as.numeric(Total)),
Load = sum(as.numeric(Load)),
Consumed = sum(as.numeric(Allocated)),
Idle = sum(as.numeric(Idle)),
Drained = sum(as.numeric(Drained)),
Memory = sum(round(as.numeric(`Available Memory`),0)),
Free_Memory = sum(round(as.numeric(`Free Memory`),0))
) %>%
mutate(
Used=round(Consumed/Cores*100,2),
Available=round(Idle/Cores*100,2),
Unavailable=round(Drained/Cores*100,2)
) -> Wulver
info <- read_delim('gpuinfo.csv',delim=";",trim_ws=TRUE)
load <- read_delim('gpuload.csv',delim=";",trim_ws=TRUE) %>% drop_na()
colnames(info) <- c('Node','Partition','Available')
colnames(load) <- c('Node','Partition','GPU')
load %>% group_by(Node,Partition) %>% summarize(Usage=sum(as.double(GPU))) %>% drop_na() -> usage
full_join(info,usage) -> gpuload
gpuload[is.na(gpuload)] <- 0
gpu_usage <- sum(gpuload$Usage)/sum(info$Available)*100
cpu_usage <- sum(clean_nodeload$Allocated)/sum(clean_nodeload$Total)*100
cpugpu_usage <- as.tibble(cbind(CPU=cpu_usage,GPU=gpu_usage)) %>% mutate(Time=now()) %>% select(c(Time,CPU,GPU))
#gpu_now <- gpuload %>% summarize(Usage=sum(Usage)/gpu_total*100) %>% mutate(Time=now(),) %>% select(c(Time,Usage))
write_delim(cpugpu_usage, gzfile('cpugpuhistory.csv.gz'),delim=";", append = TRUE)
gpuhistory <- read_delim('cpugpuhistory.csv.gz',delim=";") %>% filter(Time >= today() - months(12))
```
Status
====================================
Row {data-height=240}
-----------------------------------
```{r include=F}
general <- Wulver %>% filter(Partition=="general")
bigmem <- Wulver %>% filter(Partition=="bigmem")
gpu <- Wulver %>% filter(Partition=="gpu")
```
### general
```{r}
gauge(round(general$Used), min = 0, max = 100, symbol = '%', gaugeSectors(colors = c('red')), href="#general-1")
```
### bigmem
```{r}
gauge(round(bigmem$Used), min = 0, max = 100, symbol = '%', gaugeSectors(colors = c('red')), href="#bigmem-1")
```
### gpu
```{r}
gauge(round(gpu$Used), min = 0, max = 100, symbol = '%', gaugeSectors(colors = c('red')), href="#gpu-1")
```
Row
----------------------------------------------------------
### CPU Usage
```{r}
colors = c('#d62728','#2ca02c','#000000')
Wulver %>%
select(c("Consumed","Idle","Drained")) %>%
summarize(Used = sum(Consumed), Available=sum(Idle), Drained=sum(Drained)) %>%
mutate(Cluster="Wulver") %>%
melt(id='Cluster') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list(colors = colors ))
```
### GPU Usage
```{r}
gpuload %>%
mutate(Idle=(Available-Usage)) %>%
summarize(Used=sum(Usage),Idle=sum(Idle)) %>%
mutate(Cluster='Wulver') %>%
melt(id='Cluster') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list(colors = colors ))
```
### Memory (GB) Usage
```{r}
Wulver %>%
select(c("Memory","Free_Memory")) %>%
summarize(Total=round(sum(Memory)/1000),Free=round(sum(Free_Memory)/1000)) %>%
mutate(Cluster="Wulver",Used=round(Total-Free)) %>% select(c(Cluster,Used,Free)) %>%
melt(id='Cluster') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list( colors = colors))
```
### Queue Status
```{r}
queue_status %>%
group_by(State) %>%
summarize(Jobs=n()) %>%
plot_ly(labels = ~ State, values = ~ Jobs, type = "pie" )
```
Row
-------------------------------------------------------------------
### Queue History
```{r}
queuehist <- cbind(jobshistory$RUNNING,jobshistory$PENDING)
colnames(queuehist) <- c("Running","Pending")
dateWindow = c(as.POSIXct(today() - 7 ), now())
dygraph( xts( queuehist, order.by = jobshistory$Time) ) %>%
dyOptions(stackedGraph = TRUE) %>%
dyRangeSelector(height = 20, dateWindow = dateWindow)
```
Row
-------------------------------------------------------------------
### % Usage History
```{r}
dateWindow = c(as.POSIXct(today() - 7 ), now())
dygraph( xts( gpuhistory, order.by = gpuhistory$Time) ) %>%
dyAxis("y", valueRange = c(0, 105)) %>%
dyOptions(stackedGraph = FALSE) %>%
dyRangeSelector(height = 20, dateWindow = dateWindow)
```
Row
--------------------------------------------------------------------
### CPU Usage Summary
```{r}
Wulver %>% plot_ly(x = ~Partition, y = ~Used, name="% Used", type = "bar", marker = list(color = colors[1])) %>%
add_trace(y = ~Available, name="% Available", marker = list(color = colors[2])) %>%
add_trace(y = ~Unavailable, name="% Unavailable", marker = list(color = colors[3])) %>%
layout(yaxis = list(title = '% CPU Usage' ), xaxis = list(title = 'Partition' ), barmode = 'stack')
```
### GPU Usage Summary
```{r}
gpuload %>%
group_by(Partition) %>%
summarize(
Available=sum(Available),
Used=sum(Usage)
) %>%
mutate(Free=round(Available-Used)) %>%
select(c(Partition,Used,Free)) %>%
plot_ly(x = ~Partition, y = ~Used, name="Used", type = "bar", marker = list(color = colors[1])) %>%
add_trace(y = ~Free, name="Available", marker = list(color = colors[2])) %>%
layout(yaxis = list(title = 'GPU Usage' ), xaxis = list(title = 'Partition' ), barmode = 'stack')
```
Summary
====================================
Row {data-height=200}
-----------------------------------
### Usage
```{r}
Wulver %>% datatable(rowname=FALSE, options = list(dom = 't', pageLength = 25, autoWidth = TRUE),
colnames = c("Partition","Total Nodes","Total Cores","Current Load",
"Cores Consumed","Cores Idle","Cores Drained",
"Total Memory","Free Memory","% Used","% Available", "% Unavailable"))
```
Row {data-height=800}
-------------------------------------------------------------------
### Running Jobs
```{r}
queue_status %>%
filter(State=="RUNNING") %>% select(-c(State,Reason,GPUs)) %>%
datatable(filter = 'top' )
```
Row {data-height=800}
-------------------------------------------------
### Pending Jobs
```{r}
queue_status %>%
filter(State=="PENDING") %>% select(-c(State,`Elapsed Time`,Nodelist)) %>%
datatable(filter = 'top')
```
general {data-navmenu="Partitions"}
===================================
Row
--------------------------------------------------------------------
### total usage
```{r}
Wulver %>%
filter(Partition=="general") %>%
select(c("Partition","Consumed","Idle","Drained")) %>%
melt(id='Partition') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list(colors = colors ) )
```
### cpu usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="general") %>%
plot_ly(y = ~Nodes, x = ~Allocated, name = "Used", type = "bar", marker = list( color = colors[1]) ) %>%
add_trace(x = ~Idle, name = "Idle", marker = list( color = colors[2]) ) %>%
add_trace(x = ~Drained, name = "Drained", marker = list( color = colors[3])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Cores', dtick = 32 ), barmode = 'stack')
```
### memory usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="general") %>%
mutate(Total=as.numeric(`Available Memory`)/1000,
Free=as.numeric(`Free Memory`)/1000) %>%
plot_ly(y = ~Nodes, x = ~ Free, name = "Available", type = "bar", marker = list( color = colors[2])) %>%
add_trace(x = ~ (Total-Free), name = "Used", marker = list( color = colors[1])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Memory (GB)', dtick = 128 ), barmode = 'stack')
```
Row {data-height=800}
-------------------------------------------------------------------
### Running Jobs
```{r}
queue_status %>%
filter(Partition=="general" & State=="RUNNING") %>% select(-c(Partition,State,Reason,Priority)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
Row {data-height=800}
-------------------------------------------------------------------
### Pending Jobs
```{r}
queue_status %>%
filter(Partition=="general" & State=="PENDING") %>% select(-c(Partition,State,`Elapsed Time`,Nodelist)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
bigmem {data-navmenu="Partitions"}
===================================
Row
--------------------------------------------------------------------
### total usage
```{r}
Wulver %>%
filter(Partition=="bigmem") %>%
select(c("Partition","Consumed","Idle","Drained")) %>%
melt(id='Partition') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list(colors = colors ) )
```
### cpu usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="bigmem") %>%
plot_ly(y = ~Nodes, x = ~Allocated, name = "Used", type = "bar", marker = list( color = colors[1]) ) %>%
add_trace(x = ~Idle, name = "Idle", marker = list( color = colors[2]) ) %>%
add_trace(x = ~Drained, name = "Drained", marker = list( color = colors[3])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Cores', dtick = 32 ), barmode = 'stack')
```
### memory usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="bigmem") %>%
mutate(Total=as.numeric(`Available Memory`)/1000,
Free=as.numeric(`Free Memory`)/1000) %>%
plot_ly(y = ~Nodes, x = ~ Free, name = "Available", type = "bar", marker = list( color = colors[2])) %>%
add_trace(x = ~ (Total-Free), name = "Used", marker = list( color = colors[1])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Memory (GB)', dtick = 512 ), barmode = 'stack')
```
Row {data-height=800}
-------------------------------------------------------------------
### Running Jobs
```{r}
queue_status %>%
filter(Partition=="bigmem" & State=="RUNNING") %>% select(-c(Partition,State,Reason,Priority)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
Row {data-height=800}
-------------------------------------------------------------------
### Pending Jobs
```{r}
queue_status %>%
filter(Partition=="bigmem" & State=="PENDING") %>% select(-c(Partition,State,`Elapsed Time`,Nodelist)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
gpu {data-navmenu="Partitions"}
===================================
Row
--------------------------------------------------------------------
### total usage
```{r}
Wulver %>%
filter(Partition=="gpu") %>%
select(c("Partition","Consumed","Idle","Drained")) %>%
melt(id='Partition') %>%
plot_ly(labels = ~ variable, values = ~value, type = "pie",
marker = list(colors = colors ) )
```
### cpu usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="gpu") %>%
plot_ly(y = ~Nodes, x = ~Allocated, name = "Used", type = "bar", marker = list( color = colors[1]) ) %>%
add_trace(x = ~Idle, name = "Idle", marker = list( color = colors[2]) ) %>%
add_trace(x = ~Drained, name = "Drained", marker = list( color = colors[3])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Cores', dtick = 32 ), barmode = 'stack')
```
### gpu usage per node
```{r}
gpuload %>% filter(str_detect(Partition,"gpu")) %>%
mutate(Idle=(Available-Usage)) %>%
plot_ly(y = ~Node, x = ~Usage, name = "Used", type = "bar", marker = list( color = colors[1]) ) %>%
add_trace(x = ~Idle, name = "Available", marker = list( color = colors[2]) ) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'GPUs', dtick = 1 ), barmode = 'stack')
```
### memory usage per node
```{r}
clean_nodeload %>% filter(trimws(Partition)=="gpu") %>%
mutate(Total=as.numeric(`Available Memory`)/1000,
Free=as.numeric(`Free Memory`)/1000) %>%
plot_ly(y = ~Nodes, x = ~ Free, name = "Available", type = "bar", marker = list( color = colors[2])) %>%
add_trace(x = ~ (Total-Free), name = "Used", marker = list( color = colors[1])) %>%
layout(yaxis = list(title = '' ), xaxis = list(title = 'Memory (GB)', dtick = 128 ), barmode = 'stack')
```
Row {data-height=800}
-------------------------------------------------------------------
### Running Jobs
```{r}
queue_status %>%
filter(Partition=="gpu" & State=="RUNNING") %>% select(-c(Partition,State,Reason,Priority)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
Row {data-height=800}
-------------------------------------------------
### Pending Jobs
```{r}
queue_status %>%
filter(Partition=="gpu" & State=="PENDING") %>% select(-c(Partition,State,`Elapsed Time`,Nodelist)) %>%
datatable(filter = 'top', options = list(pageLength = 100))
```
Node Status
============================
Row {data-height=800}
----------------------------------------
```{r}
#purrr::modify_if(clean_nodeload, is.character, trimws) %>%
clean_nodeload %>%
mutate(`Available Memory`=round(as.numeric(`Available Memory`)/1000),
`Free Memory`=round(as.numeric(`Free Memory`)/1000)) %>%
datatable(filter = 'top', options = list(pageLength = 200, dom = 't'))
```
Today {data-navmenu="Jobs Completed"}
==============================
Row
---------------------------------
### Summary
```{r echo=F}
jobstoday <- read_delim('jobs.csv',delim=";") %>% select(c(JobID:End))
jobstoday %>%
group_by(Partition) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobstoday %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ Partition) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various Partitions')
)
)
```
Row
---------------------------------
### QOS Summary
```{r echo=F}
jobstoday %>%
group_by(QOS) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobstoday %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ QOS) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various QOS')
)
)
```
Row {data-height=800}
----------------------------------
```{r echo=F}
jobstoday %>%
mutate(`Wait Time (min)`=round(difftime(Start,Submit,units="mins"),2),
`Run Time (min)`=round(difftime(End,Start,units="mins"),2)) %>%
select(-c(Start,Submit,End)) %>%
datatable(filter = 'top', extensions = 'Scroller',
options = list(
dom = 't',
pageLength = 1000,
autoWidth = TRUE,
deferRender = TRUE
)
)
```
Yesterday {data-navmenu="Jobs Completed"}
==============================
Row
---------------------------------
### Summary
```{r echo=F}
jobsyesterday <- read_delim('jobs-1.csv',delim=";") %>% select(c(JobID:End))
jobsyesterday %>%
group_by(Partition) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsyesterday %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ Partition) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various Partitions')
)
)
```
Row
---------------------------------
### QOS Summary
```{r echo=F}
jobsyesterday %>%
group_by(QOS) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsyesterday %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 1) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ QOS) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various QOS')
)
)
```
Row {data-height=800}
----------------------------------
```{r echo=F}
jobsyesterday %>%
mutate(`Wait Time (min)`=round(difftime(Start,Submit,units="mins"),2),
`Run Time (min)`=round(difftime(End,Start,units="mins"),2)) %>%
select(-c(Start,Submit,End)) %>%
datatable(filter = 'top', extensions = 'Scroller',
options = list(
dom = 't',
pageLength = 1000,
autoWidth = TRUE,
deferRender = TRUE
)
)
# datatable(filter = 'top', options = list(pageLength = 1000))
```
This Month {data-navmenu="Jobs Completed"}
==============================
Row
---------------------------------
### Summary
```{r echo=F}
jobsthismonth <- read_delim('jobs-0.csv',delim=";") %>% select(c(JobID:End))
jobsthismonth %>%
group_by(Partition) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
drop_na() %>%
mutate_at(c("WaitTime","RunTime"), str_replace, " mins", "") %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsthismonth %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
drop_na() %>%
mutate_at(c("WaitTime","RunTime"), str_replace, " mins", "") %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ Partition) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various Partitions')
)
)
```
Row
---------------------------------
### QOS Summary
```{r echo=F}
jobsthismonth %>%
group_by(QOS) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 1) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsthismonth %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ QOS) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various QOS')
)
)
```
Row {data-height=800}
----------------------------------
```{r echo=F}
#jobsthismonth %>%
# mutate(`Wait Time (min)`=round(difftime(Start,Submit,units="mins"),2),
# `Run Time (min)`=round(difftime(End,Start,units="mins"),2)) %>%
# select(-c(Start,Submit,End)) %>%
# datatable(filter = 'top', options = list(pageLength = 1000))
```
This Year {data-navmenu="Jobs Completed"}
==============================
Row
---------------------------------
### Summary
```{r echo=F}
jobsthisyear <- read_delim('jobsalloc.csv.gz',delim=";") %>% select(c(JobID:End))
jobsthisyear <- rbind(jobsthisyear,jobsthismonth)
jobsthisyear %>%
group_by(Partition) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
drop_na() %>%
mutate_at(c("WaitTime","RunTime"), str_replace, " mins", "") %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsthisyear %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
drop_na() %>%
mutate_at(c("WaitTime","RunTime"), str_replace, " mins", "") %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ Partition) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various Partitions')
)
)
```
Row
---------------------------------
### QOS Summary
```{r echo=F}
jobsthisyear %>%
group_by(QOS) %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 1) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Part
jobsthisyear %>%
select(c(NCPUS,Start,Submit,End)) %>%
mutate(WaitTime=round(difftime(Start,Submit,units="mins"),2),
RunTime=round(difftime(End,Start,units="mins"),2)) %>%
filter(as.numeric(RunTime) > 0) %>%
summarize(
Wait=round(mean(as.numeric(WaitTime)),2),
Run=round(mean(as.numeric(RunTime)),2),
Jobs=n(),
CPUs=round(mean(as.numeric(NCPUS)))
) -> Timing_Total
full_join(Timing_Part,Timing_Total) -> Timing
Timing[is.na(Timing)] <- "Total"
Timing %>% melt() %>% dcast(variable ~ QOS) %>%
rename(" " = variable) %>%
datatable(
rownames = FALSE,
options = list(dom = 't'),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
htmltools::strong('Average Wait and Run Time in mins for various QOS')
)
)
```
Row {data-height=800}
----------------------------------
```{r echo=F}
#jobsthisyear %>%
# mutate(`Wait Time (min)`=round(difftime(Start,Submit,units="mins"),2),
# `Run Time (min)`=round(difftime(End,Start,units="mins"),2)) %>%
# select(-c(Start,Submit,End)) %>%
# datatable(filter = 'top', options = list(pageLength = 1000))
```