mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-07-23 12:51:40 +02:00
Centralize project filter for manager role
- Remove all unnecessary frontend code for managerfilters
This commit is contained in:
@@ -14,8 +14,6 @@
|
||||
const ccconfig = getContext('cc-config')
|
||||
|
||||
export let filterPresets = {}
|
||||
export let projects = []
|
||||
export let isManager = false
|
||||
|
||||
let filters, jobList, matchedJobs = null
|
||||
let sorting = { field: 'startTime', order: 'DESC' }, isSortingOpen = false, isMetricsSelectionOpen = false
|
||||
@@ -72,8 +70,6 @@
|
||||
<Row>
|
||||
<Col>
|
||||
<JobList
|
||||
projects={projects}
|
||||
isManager={isManager}
|
||||
bind:metrics={metrics}
|
||||
bind:sorting={sorting}
|
||||
bind:matchedJobs={matchedJobs}
|
||||
|
@@ -14,21 +14,9 @@
|
||||
|
||||
export let type
|
||||
export let filterPresets
|
||||
export let projects = []
|
||||
export let isManager = false
|
||||
|
||||
console.assert(type == 'USER' || type == 'PROJECT', 'Invalid list type provided!')
|
||||
|
||||
let projectsFilter = null
|
||||
//Setup default filter
|
||||
if (type == 'USER' && isManager == true && projects.length == 0) {
|
||||
projectsFilter = { project: {eq: "noProjectForManager"} }
|
||||
} else if (type == 'USER' && isManager == true && projects.length == 1) {
|
||||
projectsFilter = { project: {eq: projects[0]} }
|
||||
} else {
|
||||
projectsFilter = { multiProject: projects }
|
||||
}
|
||||
|
||||
const stats = operationStore(`query($filter: [JobFilter!]!) {
|
||||
rows: jobsStatistics(filter: $filter, groupBy: ${type}) {
|
||||
id
|
||||
@@ -90,9 +78,6 @@
|
||||
menuText="Only {type.toLowerCase()}s with jobs that match the filters will show up"
|
||||
on:update={({ detail }) => {
|
||||
$stats.variables = { filter: detail.filters }
|
||||
if (projectsFilter != null) {
|
||||
$stats.variables.filter.push(projectsFilter)
|
||||
}
|
||||
$stats.context.pause = false
|
||||
$stats.reexecute()
|
||||
}} />
|
||||
|
@@ -45,7 +45,6 @@
|
||||
arrayJobId: filterPresets.arrayJobId || null,
|
||||
user: filterPresets.user || '',
|
||||
project: filterPresets.project || '',
|
||||
multiProject: filterPresets.multiProject || [],
|
||||
|
||||
numNodes: filterPresets.numNodes || { from: null, to: null },
|
||||
numHWThreads: filterPresets.numHWThreads || { from: null, to: null },
|
||||
@@ -95,8 +94,6 @@
|
||||
items.push({ user: { [filters.userMatch]: filters.user } })
|
||||
if (filters.project)
|
||||
items.push({ project: { [filters.projectMatch]: filters.project } })
|
||||
if (filters.multiProject.length != 0)
|
||||
items.push({ multiProject: filters.multiProject })
|
||||
for (let stat of filters.stats)
|
||||
items.push({ [stat.field]: { from: stat.from, to: stat.to } })
|
||||
|
||||
@@ -132,9 +129,6 @@
|
||||
opts.push(`userMatch=${filters.userMatch}`)
|
||||
if (filters.project)
|
||||
opts.push(`project=${filters.project}`)
|
||||
if (filters.multiProject.length != 0)
|
||||
for (let singleProj of filters.multiProject)
|
||||
opts.push(`multiProject=${singleProj}`)
|
||||
if (filters.projectMatch != 'contains')
|
||||
opts.push(`projectMatch=${filters.projectMatch}`)
|
||||
|
||||
|
@@ -23,25 +23,12 @@
|
||||
export let sorting = { field: "startTime", order: "DESC" }
|
||||
export let matchedJobs = 0
|
||||
export let metrics = ccconfig.plot_list_selectedMetrics
|
||||
export let projects = []
|
||||
export let isManager
|
||||
|
||||
let itemsPerPage = ccconfig.plot_list_jobsPerPage
|
||||
let page = 1
|
||||
let paging = { itemsPerPage, page }
|
||||
let filter = []
|
||||
|
||||
//Setup default filter
|
||||
if (isManager == true && projects.length == 0) {
|
||||
filter.push({ project: {eq: "noProjectForManager"} })
|
||||
} else if (isManager == true && projects.length == 1) {
|
||||
filter.push({ project: {eq: projects[0]} })
|
||||
} else {
|
||||
filter.push({ multiProject: projects })
|
||||
}
|
||||
|
||||
|
||||
|
||||
const jobs = operationStore(`
|
||||
query($filter: [JobFilter!]!, $sorting: OrderByInput!, $paging: PageRequest! ){
|
||||
jobs(filter: $filter, order: $sorting, page: $paging) {
|
||||
@@ -81,15 +68,6 @@
|
||||
filters.push({ minRunningFor })
|
||||
}
|
||||
|
||||
// (Re-)Add Manager-Filter
|
||||
if (isManager == true && projects.length == 0) {
|
||||
filter.push({ project: {eq: "noProjectForManager"} })
|
||||
} else if (isManager == true && projects.length == 1) {
|
||||
filter.push({ project: {eq: projects[0]} })
|
||||
} else {
|
||||
filter.push({ multiProject: projects })
|
||||
}
|
||||
|
||||
$jobs.variables.filter = filters
|
||||
// console.log('filters:', ...filters.map(f => Object.entries(f)).flat(2))
|
||||
}
|
||||
|
@@ -5,8 +5,6 @@ new Jobs({
|
||||
target: document.getElementById('svelte-app'),
|
||||
props: {
|
||||
filterPresets: filterPresets,
|
||||
projects: projects,
|
||||
isManager: isManager
|
||||
},
|
||||
context: new Map([
|
||||
['cc-config', clusterCockpitConfig]
|
||||
|
@@ -6,8 +6,6 @@ new List({
|
||||
props: {
|
||||
filterPresets: filterPresets,
|
||||
type: listType,
|
||||
projects: projects,
|
||||
isManager: isManager
|
||||
},
|
||||
context: new Map([
|
||||
['cc-config', clusterCockpitConfig]
|
||||
|
@@ -16,7 +16,6 @@
|
||||
<script>
|
||||
const header = {
|
||||
"username": "{{ .User.Username }}",
|
||||
"projects": {{ .User.Projects }},
|
||||
"authlevel": {{ .User.AuthLevel }},
|
||||
"clusters": {{ .Clusters }},
|
||||
};
|
||||
|
@@ -10,8 +10,6 @@
|
||||
<script>
|
||||
const filterPresets = {{ .FilterPresets }};
|
||||
const clusterCockpitConfig = {{ .Config }};
|
||||
const projects = {{ .User.Projects }};
|
||||
const isManager = {{ eq .User.AuthLevel 3 }};
|
||||
</script>
|
||||
<script src='/build/jobs.js'></script>
|
||||
{{end}}
|
||||
|
@@ -10,8 +10,6 @@
|
||||
const listType = {{ .Infos.listType }};
|
||||
const filterPresets = {{ .FilterPresets }};
|
||||
const clusterCockpitConfig = {{ .Config }};
|
||||
const projects = {{ .User.Projects }};
|
||||
const isManager = {{ eq .User.AuthLevel 3 }};
|
||||
</script>
|
||||
<script src='/build/list.js'></script>
|
||||
{{end}}
|
||||
|
@@ -54,9 +54,8 @@ func init() {
|
||||
}
|
||||
|
||||
type User struct {
|
||||
Username string // Username of the currently logged in user
|
||||
Projects []string // Project(s) of the user (relevant for managers only)
|
||||
AuthLevel int // Level of authorization
|
||||
Username string // Username of the currently logged in user
|
||||
AuthLevel int // Level of authorization
|
||||
}
|
||||
|
||||
type Build struct {
|
||||
|
Reference in New Issue
Block a user