mirror of
				https://github.com/karl0ss/homepage.git
				synced 2025-11-04 00:10:57 +00:00 
			
		
		
		
	Prefer swarm task containers locally for status / stats
This commit is contained in:
		
							parent
							
								
									aabd05a0cb
								
							
						
					
					
						commit
						f74275293a
					
				@ -53,17 +53,25 @@ export default async function handler(req, res) {
 | 
			
		||||
        })
 | 
			
		||||
        .catch(() => []);
 | 
			
		||||
 | 
			
		||||
      // For now we are only interested in the first one (in case replicas > 1).
 | 
			
		||||
      // TODO: Show the result for all replicas/containers?
 | 
			
		||||
      const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
 | 
			
		||||
      // We can only get stats for 'local' containers so try to find one
 | 
			
		||||
      const localContainerIDs = containers.map(c => c.Id);
 | 
			
		||||
      const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
 | 
			
		||||
      const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
 | 
			
		||||
      
 | 
			
		||||
      if (taskContainerId) {
 | 
			
		||||
        const container = docker.getContainer(taskContainerId);
 | 
			
		||||
        const stats = await container.stats({ stream: false });
 | 
			
		||||
        try {
 | 
			
		||||
          const container = docker.getContainer(taskContainerId);
 | 
			
		||||
          const stats = await container.stats({ stream: false });
 | 
			
		||||
 | 
			
		||||
        return res.status(200).json({
 | 
			
		||||
          stats,
 | 
			
		||||
        });
 | 
			
		||||
          return res.status(200).json({
 | 
			
		||||
            stats,
 | 
			
		||||
          });
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
          return res.status(200).json({
 | 
			
		||||
            error: "Unable to retrieve stats"
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -53,18 +53,28 @@ export default async function handler(req, res) {
 | 
			
		||||
        })
 | 
			
		||||
        .catch(() => []);
 | 
			
		||||
 | 
			
		||||
      // For now we are only interested in the first one (in case replicas > 1).
 | 
			
		||||
      // TODO: Show the result for all replicas/containers?
 | 
			
		||||
      const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
 | 
			
		||||
      // We can only get stats for 'local' containers so try to find one
 | 
			
		||||
      const localContainerIDs = containers.map(c => c.Id);
 | 
			
		||||
      const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
 | 
			
		||||
      const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
 | 
			
		||||
      
 | 
			
		||||
      if (taskContainerId) {
 | 
			
		||||
        const container = docker.getContainer(taskContainerId);
 | 
			
		||||
        const info = await container.inspect();
 | 
			
		||||
        try {
 | 
			
		||||
          const container = docker.getContainer(taskContainerId);
 | 
			
		||||
          const info = await container.inspect();
 | 
			
		||||
  
 | 
			
		||||
        return res.status(200).json({
 | 
			
		||||
          status: info.State.Status,
 | 
			
		||||
          health: info.State.Health?.Status,
 | 
			
		||||
        });
 | 
			
		||||
          return res.status(200).json({
 | 
			
		||||
            status: info.State.Status,
 | 
			
		||||
            health: info.State.Health?.Status,
 | 
			
		||||
          });
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
          if (task) {
 | 
			
		||||
            return res.status(200).json({
 | 
			
		||||
              status: task.Status.State
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user