@@ -766,3 +766,67 @@ func ParseJobInfo(out string) ([]JobInfo, error) {
766766 }
767767 return jobInfos , nil
768768}
769+
770+ // ParseClusterQueueSummary parses the output of qstat -g c
771+ func ParseClusterQueueSummary (out string ) ([]ClusterQueueSummary , error ) {
772+ var summaries []ClusterQueueSummary
773+ lines := strings .Split (out , "\n " )
774+
775+ // Skip the header lines
776+ for _ , line := range lines [2 :] {
777+ fields := strings .Fields (line )
778+ if len (fields ) != 8 {
779+ continue // Skip lines that don't have the expected number of fields
780+ }
781+
782+ cqLoad , err := strconv .ParseFloat (fields [1 ], 64 )
783+ if err != nil {
784+ return nil , fmt .Errorf ("failed to parse CQLoad: %v" , err )
785+ }
786+
787+ used , err := strconv .Atoi (fields [2 ])
788+ if err != nil {
789+ return nil , fmt .Errorf ("failed to parse Used: %v" , err )
790+ }
791+
792+ reserved , err := strconv .Atoi (fields [3 ])
793+ if err != nil {
794+ return nil , fmt .Errorf ("failed to parse Reserved: %v" , err )
795+ }
796+
797+ available , err := strconv .Atoi (fields [4 ])
798+ if err != nil {
799+ return nil , fmt .Errorf ("failed to parse Available: %v" , err )
800+ }
801+
802+ total , err := strconv .Atoi (fields [5 ])
803+ if err != nil {
804+ return nil , fmt .Errorf ("failed to parse Total: %v" , err )
805+ }
806+
807+ aoACDS , err := strconv .Atoi (fields [6 ])
808+ if err != nil {
809+ return nil , fmt .Errorf ("failed to parse AoACDS: %v" , err )
810+ }
811+
812+ cdsuE , err := strconv .Atoi (fields [7 ])
813+ if err != nil {
814+ return nil , fmt .Errorf ("failed to parse CdsuE: %v" , err )
815+ }
816+
817+ summary := ClusterQueueSummary {
818+ ClusterQueue : fields [0 ],
819+ CQLoad : cqLoad ,
820+ Used : used ,
821+ Reserved : reserved ,
822+ Available : available ,
823+ Total : total ,
824+ AoACDS : aoACDS ,
825+ CdsuE : cdsuE ,
826+ }
827+
828+ summaries = append (summaries , summary )
829+ }
830+
831+ return summaries , nil
832+ }
0 commit comments