Merge Go frontend (apiserver + xcecli) into meson build
This commit is contained in:
parent
43dc12a36c
commit
c9dc8c4676
205 changed files with 30793 additions and 328 deletions
117
src/frontend/apiserver/services/data_service.go
Normal file
117
src/frontend/apiserver/services/data_service.go
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"apiserver/store"
|
||||
"apiserver/utils"
|
||||
"fmt"
|
||||
|
||||
logger "apiserver/utils"
|
||||
)
|
||||
|
||||
// Store table name constants.
|
||||
const (
|
||||
TableJobInfo = "job_info"
|
||||
TableQueueInfo = "queue_info"
|
||||
TableHostInfo = "host_info"
|
||||
TableResourceDef = "resource_def"
|
||||
TableResourceLoc = "resource_loc"
|
||||
TableClusterInfo = "cluster_info"
|
||||
TableArrayJob = "array_job"
|
||||
TableJobExecHosts = "job_exec_hosts"
|
||||
TableRolePermission = "role_permission"
|
||||
TableUserRole = "user_role"
|
||||
)
|
||||
|
||||
// QueryData queries in-memory store by table name, applies filter/sort/pagination.
|
||||
func QueryData(tableName string, queryOpts *utils.QueryOptions, fields []string) ([]utils.OrderMap, string, error) {
|
||||
var rows []utils.OrderMap
|
||||
|
||||
switch tableName {
|
||||
case TableJobInfo:
|
||||
rows = store.StoreToOrderMaps(store.Jobs)
|
||||
case TableQueueInfo:
|
||||
rows = store.StoreToOrderMaps(store.Queues)
|
||||
case TableHostInfo:
|
||||
rows = store.StoreToOrderMaps(store.Hosts)
|
||||
case TableResourceDef:
|
||||
rows = store.StoreToOrderMaps(store.Resources)
|
||||
case TableResourceLoc:
|
||||
rows = store.StoreToOrderMaps(store.ResourceLocations)
|
||||
case TableClusterInfo:
|
||||
rows = store.StoreToOrderMaps(store.Clusters)
|
||||
case TableArrayJob:
|
||||
rows = store.StoreToOrderMaps(store.ArrayJobs)
|
||||
case TableJobExecHosts:
|
||||
rows = store.StoreToOrderMaps(store.JobExecHosts)
|
||||
case TableRolePermission:
|
||||
rows = roleStoreToOrderMaps()
|
||||
case TableUserRole:
|
||||
rows = userRoleStoreToOrderMaps()
|
||||
default:
|
||||
return nil, "", fmt.Errorf("unknown store: %s", tableName)
|
||||
}
|
||||
|
||||
result, pageToken := store.ExecuteQuery(rows, queryOpts, fields)
|
||||
return result, pageToken, nil
|
||||
}
|
||||
|
||||
// InsertEntity inserts an entity into the named store.
|
||||
func InsertEntity(tableName string, key string, entity interface{}) error {
|
||||
logger.Debug("InsertEntity: " + tableName + " key=" + key)
|
||||
// For now, this is a no-op since job submission goes through backend.
|
||||
// Queue/host/resource updates come from notifications.
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteEntity deletes an entity from the named store.
|
||||
func DeleteEntity(tableName string, key string) error {
|
||||
logger.Debug("DeleteEntity: " + tableName + " key=" + key)
|
||||
switch tableName {
|
||||
case TableRolePermission:
|
||||
store.Roles.Delete(key)
|
||||
case TableUserRole:
|
||||
// key format: "username:rolename"
|
||||
// handled by store helper functions
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// roleStoreToOrderMaps converts role store to OrderMap format.
|
||||
func roleStoreToOrderMaps() []utils.OrderMap {
|
||||
rows := make([]utils.OrderMap, 0, store.Roles.Count()*4)
|
||||
store.Roles.Range(func(roleName string, entry store.RoleEntry) bool {
|
||||
for _, perm := range entry.Permissions {
|
||||
row := utils.OrderMap{
|
||||
Fields: []string{"role_name", "action", "domain_type", "domain_values"},
|
||||
Data: map[string]interface{}{
|
||||
"role_name": roleName,
|
||||
"action": perm.Action,
|
||||
"domain_type": perm.DomainType,
|
||||
"domain_values": perm.DomainValues,
|
||||
},
|
||||
}
|
||||
rows = append(rows, row)
|
||||
}
|
||||
return true
|
||||
})
|
||||
return rows
|
||||
}
|
||||
|
||||
// userRoleStoreToOrderMaps converts user-role store to OrderMap format.
|
||||
func userRoleStoreToOrderMaps() []utils.OrderMap {
|
||||
rows := make([]utils.OrderMap, 0, store.UserRoles.Count()*2)
|
||||
store.UserRoles.Range(func(userName string, roleNames []string) bool {
|
||||
for _, roleName := range roleNames {
|
||||
row := utils.OrderMap{
|
||||
Fields: []string{"user_name", "role_name"},
|
||||
Data: map[string]interface{}{
|
||||
"user_name": userName,
|
||||
"role_name": roleName,
|
||||
},
|
||||
}
|
||||
rows = append(rows, row)
|
||||
}
|
||||
return true
|
||||
})
|
||||
return rows
|
||||
}
|
||||
16
src/frontend/apiserver/services/job_service.go
Normal file
16
src/frontend/apiserver/services/job_service.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"apiserver/backend"
|
||||
"apiserver/models"
|
||||
)
|
||||
|
||||
// SubmitJob sends a job to the backend. The store is updated via notification callback.
|
||||
func SubmitJob(job *models.JobInfo) error {
|
||||
return backend.SubmitJob(job)
|
||||
}
|
||||
|
||||
// SubmitArrayJobs sends an array job to the backend.
|
||||
func SubmitArrayJobs(arrayjob models.ArrayJobInfo, joblist []models.JobInfo) error {
|
||||
return backend.SubmitArrayJobs(&arrayjob, joblist)
|
||||
}
|
||||
29
src/frontend/apiserver/services/rbac_service.go
Normal file
29
src/frontend/apiserver/services/rbac_service.go
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"apiserver/store"
|
||||
"apiserver/utils"
|
||||
)
|
||||
|
||||
// GetUserPermissions returns the user's roles and their permissions.
|
||||
func GetUserPermissions(username string) ([]string, []utils.OrderMap, error) {
|
||||
roleNames := store.GetUserRoleNames(username)
|
||||
|
||||
var permRows []utils.OrderMap
|
||||
for _, roleName := range roleNames {
|
||||
perms := store.GetRolePermissions(roleName)
|
||||
for _, perm := range perms {
|
||||
row := utils.OrderMap{
|
||||
Fields: []string{"role_name", "action", "domain_type", "domain_values"},
|
||||
Data: map[string]interface{}{
|
||||
"role_name": roleName,
|
||||
"action": perm.Action,
|
||||
"domain_type": perm.DomainType,
|
||||
"domain_values": perm.DomainValues,
|
||||
},
|
||||
}
|
||||
permRows = append(permRows, row)
|
||||
}
|
||||
}
|
||||
return roleNames, permRows, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue