Example #1
0
    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)
Example #2
0
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)
Example #3
0
    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)