def GET(self, node=None): """ 查询所有可用的节点群,并组织返回节点信息 """ res = {"code": 0, "msg": None, "data": []} if self.leader: #format (host, id, role, status, availability, reachability, containers, cpu, mem, label, UpdatedAt, DockerVersion). req_data = self._checkSwarmNode(self.leader, node) req_data = req_data if isinstance(req_data, (list, tuple)) else (req_data, ) node_data = [] for i in req_data: try: node_id = i['ID'] node_role = 'Leader' if i.get( 'ManagerStatus', {}).get('Leader') else i['Spec'].get('Role') node_host = i['Spec'].get('Labels', {}).get( 'ipaddr', i['Description']['Hostname']) or i.get( 'ManagerStatus', {}).get('Addr', '').split(':')[0] node_status = i['Status']['State'] node_availability = i['Spec'].get('Availability') node_reachability = i.get('ManagerStatus', {}).get('Reachability') node_containers = self._checkSwarmNodeinfo(node_host).get( "ContainersRunning" ) if ip_check( node_host ) and node_status == "ready" and node_availability == "active" else 'Unknown' node_cpu = int(i['Description']['Resources']['NanoCPUs'] / 1e9) node_mem = int( i['Description']['Resources']['MemoryBytes'] / 1e6 / 1024) #bytes to G node_label = i['Spec'].get('Labels') if isinstance(node_label, dict): _node_label = '' for k, v in node_label.iteritems(): _node_label += '%s=%s, ' % (k, v) node_label = _node_label.strip(' ,') node_CreatedAt = timeChange(i['CreatedAt']) node_UpdatedAt = timeChange(i['UpdatedAt']) node_dockerVersion = i['Description']['Engine'][ 'EngineVersion'] node_indexVersion = i.get("Version", {}).get("Index") except Exception, e: logger.error(e, exc_info=True) logger.debug(i) node_host = i['Spec'].get('Labels', {}).get( 'ipaddr', i['Description']['Hostname']) or i.get( 'ManagerStatus', {}).get('Addr', '').split(':')[0] node_data.append((node_host, i.get("ID"))) else: node_data.append( (node_host, node_id, node_role, node_status, node_availability, node_reachability, node_containers, node_cpu, node_mem, node_label, node_CreatedAt, node_UpdatedAt, node_dockerVersion)) res.update(data=node_data)
def ApiComments(): res = {"code": 0, "data": [], "msg": None} args = dict(short_name=g.plugins['DuoshuoComment']['shortName'], range="all", num_items=request.args.get("limit", 10)) try: data = requests.get("http://api.duoshuo.com/sites/listTopThreads.json", params=args, timeout=5, headers={ "User-Agent": "Interest.blog/www.saintic.com" }).json() blog = [ _ for _ in data.get("response") if _.get("comments") != 0 and _.update( created_at=timeChange(_['created_at'])) == None ] except Exception, e: logger.error(e, exc_info=True)
def GET(self, service=None, core=False, core_convert=False): res = {"msg": None, "code": 0, "data": ()} if self.leader: ServiceUrl = Splice( netloc=self.leader, port=self.port, path="/services/%s" % service).geturl if service else Splice( netloc=self.leader, port=self.port, path="/services").geturl logger.info( "Get service url is %s, core is %s, core_convert is %s" % (ServiceUrl, core, core_convert)) try: r = requests.get(ServiceUrl, timeout=self.timeout, verify=self.verify) services = r.json() services = services if isinstance(services, (list, tuple)) else (services, ) services_core = [] except Exception, e: logger.error(e, exc_info=True) res.update(msg="Retrieve service fail", code=30000) else: if r.status_code == 404: res.update(msg="No such service<%s>" % service, data=[], code=30010) logger.info(res) return res elif core == False: res.update(data=services) elif core == True and core_convert == True: try: for i in services: logger.debug(i) i_ID = i.get("ID") i_Name = i.get("Spec", {}).get("Name") i_CreatedAt = timeChange(i.get("CreatedAt")) i_UpdatedAt = timeChange(i.get("UpdatedAt")) i_Labels = i.get("Spec", {}).get("Labels") i_Image = i.get("Spec", {}).get( "TaskTemplate", {}).get("ContainerSpec", {}).get("Image") i_Env = i.get("Spec", {}).get("TaskTemplate", {}).get("ContainerSpec", {}).get("Env") #### start convert mount i_Mounts = i.get("Spec", {}).get( "TaskTemplate", {}).get("ContainerSpec", {}).get("Mounts", []) _i_Mounts = [] for _ in i_Mounts: _i_Mounts.append( "%s:%s:%s:%s" % (_.get("Source"), _.get("Target"), _.get("ReadOnly", ""), _.get("Type", ""))) i_Mounts = _i_Mounts #### end convert mount i_Replicas = "global" if "Global" in i.get( "Spec", {}).get("Mode", {}) else i.get( "Spec", {}).get("Mode", {}).get( "Replicated", {}).get("Replicas") i_NetMode = i.get("Endpoint", {}).get( "Spec", {}).get("Mode") or i.get("Spec", {}).get( "EndpointSpec", {}).get("Mode") #### start convert publish i_NetPorts = i.get("Endpoint", {}).get("Spec", {}).get("Ports", []) _i_NetPorts = [] for _ in i_NetPorts: _i_NetPorts.append( "%s:%s:%s" % (_.get("PublishedPort"), _.get("TargetPort"), _.get("Protocol"))) i_NetPorts = _i_NetPorts #### end convert publish #### start convert vip i_NetVip = i.get("Endpoint", {}).get("VirtualIPs", []) _i_NetVip = [] for _ in i_NetVip: _i_NetVip.append(_.get("Addr")) i_NetVip = _i_NetVip #### end convert vip i_Version = i.get("Version", {}).get("Index") i_UpdateStatus = "%s(%s)" % ( i.get("UpdateStatus").get("State"), timeChange( i.get("UpdateStatus").get("CompletedAt")) ) if i.get("UpdateStatus").get("State") else None services_core.append({ "ID": i_ID, "Name": i_Name, "CreatedAt": i_CreatedAt, "UpdatedAt": i_UpdatedAt, "Labels": i_Labels, "Image": i_Image, "Env": i_Env, "Mounts": i_Mounts, "Replicas": i_Replicas, "NetMode": i_NetMode, "NetPorts": i_NetPorts, "NetVip": i_NetVip, "Version": i_Version, "UpdateStatus": i_UpdateStatus }) except Exception, e: logger.error(e, exc_info=True) else: res.update(data=services_core) elif core == True and core_convert == False: try: for i in services: logger.debug(i) services_core.append({ "ID": i.get("ID"), "Name": i.get("Spec", {}).get("Name"), "CreatedAt": i.get("CreatedAt"), "UpdatedAt": i.get("UpdatedAt"), "Labels": i.get("Spec", {}).get("Labels"), "Image": i.get("Spec", {}).get("TaskTemplate", {}).get("ContainerSpec", {}).get("Image"), "Env": i.get("Spec", {}).get("TaskTemplate", {}).get("ContainerSpec", {}).get("Env"), "Mounts": i.get("Spec", {}).get("TaskTemplate", {}).get("ContainerSpec", {}).get("Mounts", []), "Replicas": i.get("Spec", {}).get("Mode", {}).get( "Replicated", {}).get("Replicas") or "global", "NetMode": i.get("Endpoint", {}).get("Spec", {}).get("Mode") or i.get("Spec", {}).get("EndpointSpec", {}).get("Mode"), "NetPorts": i.get("Endpoint", {}).get("Spec", {}).get("Ports"), "NetVip": i.get("Endpoint", {}).get("VirtualIPs"), "Version": i.get("Version", {}).get("Index"), "UpdateStatus": "%s(%s)" % (i.get("UpdateStatus").get("State"), i.get("UpdateStatus").get("CompletedAt")) if i.get("UpdateStatus").get("State") else None }) except Exception, e: logger.error(e, exc_info=True)