@@ -255,140 +255,24 @@ func (m Manager) SetServiceReplicaCount(serviceName string, replicas int) error
255255 }
256256}
257257
258- func (m Manager ) RealtimeInfoRunningServices () (map [string ]ServiceRealtimeInfo , error ) {
259- // fetch all nodes and store in map > nodeID:nodeDetails
260- nodes , err := m .client .NodeList (m .ctx , types.NodeListOptions {})
261- if err != nil {
262- return nil , errors .New ("error getting node list" )
263- }
264- nodeMap := make (map [string ]swarm.Node )
265- for _ , node := range nodes {
266- nodeMap [node .ID ] = node
267- }
268- // fetch all services and store in map > serviceName:serviceDetails
269- services , err := m .client .ServiceList (m .ctx , types.ServiceListOptions {})
270- if err != nil {
271- return nil , errors .New ("error getting service list" )
272- }
273- // create map of service name to service realtime info
274- serviceRealtimeInfoMap := make (map [string ]ServiceRealtimeInfo )
275- // analyze each service
276- for _ , service := range services {
277- runningCount := 0
278-
279- // inspect service to get desired count
280- serviceData , _ , err := m .client .ServiceInspectWithRaw (m .ctx , service .ID , types.ServiceInspectOptions {})
281- if err != nil {
282- continue
283- }
284- // create service realtime info
285- serviceRealtimeInfo := ServiceRealtimeInfo {}
286- serviceRealtimeInfo .Name = serviceData .Spec .Name
287- serviceRealtimeInfo .PlacementInfos = []ServiceTaskPlacementInfo {}
288- // set desired count
289- if serviceData .Spec .Mode .Replicated != nil {
290- serviceRealtimeInfo .DesiredReplicas = int (* serviceData .Spec .Mode .Replicated .Replicas )
291- serviceRealtimeInfo .ReplicatedService = true
292- } else {
293- serviceRealtimeInfo .DesiredReplicas = - 1
294- serviceRealtimeInfo .ReplicatedService = false
295- }
296-
297- // query task list
298- tasks , err := m .client .TaskList (m .ctx , types.TaskListOptions {
299- Filters : filters .NewArgs (
300- filters .Arg ("service" , serviceData .Spec .Name ),
301- ),
302- })
303- if err != nil {
304- continue
305- }
306- servicePlacementCountMap := make (map [string ]int ) // nodeID:count
307- // set placement infos > how many replicas are running in each node
308- for _ , task := range tasks {
309- if task .Status .State == swarm .TaskStateRunning {
310- servicePlacementCountMap [task .NodeID ]++
311- }
312- }
313- for nodeID , count := range servicePlacementCountMap {
314- node := nodeMap [nodeID ]
315- serviceRealtimeInfo .PlacementInfos = append (serviceRealtimeInfo .PlacementInfos , ServiceTaskPlacementInfo {
316- NodeID : nodeID ,
317- NodeName : node .Description .Hostname ,
318- IsManagerNode : node .Spec .Role != swarm .NodeRoleManager ,
319- RunningReplicas : count ,
320- })
321- runningCount += count
322- }
323- // set service realtime info in map
324- serviceRealtimeInfo .RunningReplicas = runningCount
325- serviceRealtimeInfoMap [serviceRealtimeInfo .Name ] = serviceRealtimeInfo
326- }
327- return serviceRealtimeInfoMap , nil
328- }
329-
330- func (m Manager ) RealtimeInfoService (serviceName string , ignoreNodeDetails bool ) (ServiceRealtimeInfo , error ) {
331- runningCount := 0
332- serviceRealtimeInfo := ServiceRealtimeInfo {}
333- // fetch all nodes and store in map > nodeID:nodeDetails
334- nodeMap := make (map [string ]swarm.Node )
335- if ! ignoreNodeDetails {
336- nodes , err := m .client .NodeList (m .ctx , types.NodeListOptions {})
337- if err != nil {
338- return serviceRealtimeInfo , errors .New ("error getting node list" )
339- }
340- for _ , node := range nodes {
341- nodeMap [node .ID ] = node
342- }
343- }
344- // inspect service to get desired count
345- serviceData , _ , err := m .client .ServiceInspectWithRaw (m .ctx , serviceName , types.ServiceInspectOptions {})
346- if err != nil {
347- return serviceRealtimeInfo , errors .New ("error getting service" )
348- }
349- // create service realtime info
350- serviceRealtimeInfo .Name = serviceData .Spec .Name
351- serviceRealtimeInfo .PlacementInfos = []ServiceTaskPlacementInfo {}
352- // set desired count
353- if serviceData .Spec .Mode .Replicated != nil {
354- serviceRealtimeInfo .DesiredReplicas = int (* serviceData .Spec .Mode .Replicated .Replicas )
355- serviceRealtimeInfo .ReplicatedService = true
356- } else {
357- serviceRealtimeInfo .DesiredReplicas = - 1
358- serviceRealtimeInfo .ReplicatedService = false
359- }
360-
258+ func (m Manager ) NoOfRunningTasks (serviceName string ) (int , error ) {
361259 // query task list
362260 tasks , err := m .client .TaskList (m .ctx , types.TaskListOptions {
363261 Filters : filters .NewArgs (
364- filters .Arg ("service" , serviceData . Spec . Name ),
262+ filters .Arg ("service" , serviceName ),
365263 ),
366264 })
367265 if err != nil {
368- return serviceRealtimeInfo , err
266+ return 0 , err
369267 }
370- servicePlacementCountMap := make ( map [ string ] int ) // nodeID:count
268+ runningCount := 0
371269 // set placement infos > how many replicas are running in each node
372270 for _ , task := range tasks {
373271 if task .Status .State == swarm .TaskStateRunning {
374- servicePlacementCountMap [task .NodeID ]++
375- }
376- }
377- for nodeID , count := range servicePlacementCountMap {
378- if ! ignoreNodeDetails {
379- node := nodeMap [nodeID ]
380- serviceRealtimeInfo .PlacementInfos = append (serviceRealtimeInfo .PlacementInfos , ServiceTaskPlacementInfo {
381- NodeID : nodeID ,
382- NodeName : node .Description .Hostname ,
383- IsManagerNode : node .Spec .Role != swarm .NodeRoleManager ,
384- RunningReplicas : count ,
385- })
272+ runningCount ++
386273 }
387- runningCount += count
388274 }
389- // set service realtime info in map
390- serviceRealtimeInfo .RunningReplicas = runningCount
391- return serviceRealtimeInfo , nil
275+ return runningCount , nil
392276}
393277
394278// ServiceRunningServers Fetch the servers where a service is running
0 commit comments