|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package slurmer
-
- /*
- #cgo LDFLAGS: -lslurmdb
-
- #include <stdio.h>
- #include <slurm/slurm.h>
- #include <slurm/slurmdb.h>
- #include <memory.h>
- #include <malloc.h>
-
- typedef struct wckey_info_msg {
- uint32_t record_count;
- slurmdb_wckey_rec_t *wckey_array;
- } wckey_info_msg_t;
-
- typedef struct slurmdb_wckey_rec{
- uint16_t admin_level;
- List assoc_list;
- List coord_accts;
- char *default_acct;
- char *default_wckey;
- char *name;
- char *old_name;
- uint32_t uid;
- List wckey_list;
- } slurmdb_wckey_rec_pcm;
-
- struct wckey_info_msg get_wckey_info() {
- struct wckey_info_msg wckeyinfo;
- List wckeyList = NULL;
- slurmdb_wckey_cond_t *wckey_cond = NULL;
- void *db_conn;
- db_conn = slurmdb_connection_get();
- wckeyList = slurmdb_wckeys_get(db_conn, wckey_cond);
- slurmdb_connection_close(&db_conn);
-
- slurmdb_wckey_rec_t *rec = NULL;
- ListIterator itr = slurm_list_iterator_create(wckeyList);
- int i = 0;
- uint32_t length;
- length = slurm_list_count(wckeyList);
- wckeyinfo.record_count = length;
- wckeyinfo.wckey_array = malloc(length * sizeof(slurmdb_wckey_rec_t));
- while ((rec = slurm_list_next(itr))) {
- wckeyinfo.wckey_array[i] = *rec;
- i++;
- }
- return wckeyinfo;
- }
-
- struct slurmdb_wckey_rec *wckey_from_list(struct wckey_info_msg *list, int i) {
- return (struct slurmdb_wckey_rec *) &list->wckey_array[i];
- }
-
- */
- import "C"
- import (
- pbslurm "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/gen/idl"
- "context"
- )
-
- type WckeyInfoMsg struct {
- LastUpdate int64
- RecordCount uint32
- WckeyInfoList []pbslurm.WckeyInfo
- }
-
- func WckeyDescriptorConvertCToGo(cStruct *C.struct_slurmdb_wckey_rec) pbslurm.WckeyInfo {
- var goStruct pbslurm.WckeyInfo
- goStruct.Name = C.GoString(cStruct.name)
- return goStruct
- }
-
- func GetWckeyInfo() WckeyInfoMsg {
- var goWckeyBuffer WckeyInfoMsg
- cWckeyBuffer := C.get_wckey_info()
- goWckeyBuffer.RecordCount = uint32(cWckeyBuffer.record_count)
- goWckeyBuffer.WckeyInfoList = make([]pbslurm.WckeyInfo, cWckeyBuffer.record_count, cWckeyBuffer.record_count)
-
- for i := uint32(0); i < goWckeyBuffer.RecordCount; i++ {
- wckey := C.wckey_from_list(&cWckeyBuffer, C.int(i))
- goWckey := WckeyDescriptorConvertCToGo(wckey)
- goWckeyBuffer.WckeyInfoList[i] = goWckey
- }
- return goWckeyBuffer
- }
-
- func (slurmStruct SlurmStruct) ListWckeys(ctx context.Context, req *pbslurm.ListWckeysReq) (*pbslurm.ListWckeysResp, error) {
-
- wckeyList := GetWckeyInfo()
-
- resp := pbslurm.ListWckeysResp{}
- for _, wckey := range wckeyList.WckeyInfoList {
- wckeyInfoResult := wckey
- //wckeyInfoResult.Name = wckey.Name
-
- resp.WckeyInfos = append(resp.WckeyInfos, &wckeyInfoResult)
- }
-
- return &resp, nil
- }
-
- func (slurmStruct SlurmStruct) GetWckey(ctx context.Context, req *pbslurm.GetWckeyReq) (*pbslurm.GetWckeyResp, error) {
-
- wckeyList := GetWckeyInfo()
-
- resp := pbslurm.GetWckeyResp{}
- for _, wckey := range wckeyList.WckeyInfoList {
- //wckeyInfoResult := pbslurm.WckeyInfo{}
- //todo add filter logic
- wckeyInfoResult := wckey
- //wckeyInfoResult.Name = wckey.Name
-
- resp.WckeyInfo = append(resp.WckeyInfo, &wckeyInfoResult)
- }
-
- return &resp, nil
- }
|