def get_images(): response.content_type = 'application/json' if self.con is None: return json.dumps(None) imgs = get_json('/images/json', local_socket='/var/run/docker.sock') r = [lower_dict(d) for d in imgs] return json.dumps(r)
def load_containers(self): if not self.con: return try: conts = get_json('/containers/json', local_socket='/var/run/docker.sock') except request_errors, exp: self.connect() return
def load_images(self): if not self.con: return try: self.images = get_json('/images/json', local_socket='/var/run/docker.sock') except request_errors, exp: self.connect() return
def get_images(_id): response.content_type = 'application/json' if self.con is None: return json.dumps(None) imgs = get_json('/images/json', local_socket='/var/run/docker.sock') for d in imgs: if d['Id'] == _id: return json.dumps(lower_dict(d)) return json.dumps(None)
def connect(self): if not self.con: try: self.con = get_json('/version', local_socket='/var/run/docker.sock') except request_errors, exp: # cannot connect self.con = None logger.debug('Cannot connect to docker') return # Version return something like this: #{ # "ApiVersion":"1.12", # "Version":"0.2.2", # "GitCommit":"5a2a5cc+CHANGES", # "GoVersion":"go1.0.3" # } if self.con == '': self.con = None logger.debug('Cannot connect to docker')
def do_loop(self): self.connect() self.load_containers() self.load_images() while True: self.connect() if not self.con: time.sleep(1) # do not hammer the connexion continue now = int(time.time()) try: evts = get_json("/events", local_socket='/var/run/docker.sock', params={'until':now, 'since':now - 1}, multi=True) except Exception, exp: logger.debug('cannot get docker events: %s' % exp) time.sleep(1) continue logger.debug("GET docker events %s" % evts) # docker an return one or more dict if isinstance(evts, dict): evts = [evts] # now manage events and lock on it #evts = self.con.events() # can lock here for ev in evts: evdata = ev _id = evdata["id"] status = evdata["status"] if status in ("die", "stop"): if _id in self.containers: logger.debug('removing a container %s' % _id) del self.containers[_id] # stats will be cleaned on the next computation else: logger.debug('Asking to remove an unknow container? %s' % _id) elif status == 'start': self.load_container(_id) else: logger.debug('UNKNOWN EVENT IN DOCKER %s' % status) time.sleep(1)
def load_container(self, _id): try: inspect = get_json('/containers/%s/json' % _id, local_socket='/var/run/docker.sock') except request_errors, exp: self.connect() return
def get_kunai_json(uri): local_socket = get_local_socket() return get_json(uri, local_socket)