bonjour, j’essaie d’utiliser l’API rest consumer et je suis en train d’écrire une class en python,
pour tester j’utilise le package HWMonitor mais il y a des choses que je n’arrive pas à faire comme:
- créé une souscription avec SubscribeStateObjects , j’ai tjrs l’erreur 404
« Message »: »No HTTP resource was found that matches the request URI ‘http://localhost:8088/rest/constellation/SubscribeStateObjects?PackageName=DayInfo&SentinelName=xxxx&AccessKey=xxxxxxxxxxxxxxx&Name=NameDay’. », »MessageDetail »: »No action was found on the controller ‘Constellation’ that matches the name ‘SubscribeStateObjects’. »}
– aussi je peux créer une souscription à des messages ‘SubscribeToMessage’
mais quand je fait un ‘GetMessages’, j’ai une réponse vierge (pas vu de différences )
pour ceux que ça intéresse , ci-joint le code
Est-ce que certains ont déjà essayé???
Merci
# coding: utf-8 """ ## # @file Constellation_REST.py # @brief module permettant d'utiliser l'API REST de Constellation # @version 0.1 # @date 14 octobre 2016 # CREATION: # SUCHAUD.N # MODIFICATIONS: Utilise l'API REST de Constellation pour accéder aux données. Utilisation : instantation: o = Constellation_REST() o.Init_Credential('828c0391715be45ade4bccb1a3e37dc7983dd9af') o.Init_Sentinel('FR011927') o.Init_Package('DayInfo') -- les valeurs passées (Credential,Sentinel,Package) avec les fonctions Init_xxx se retrouveront dans le header HTTP """ import requests #from requests.auth import HTTPDigestAuth import json import inspect # pour recuperer les args d'une fonction """ # Souscription à un message url = "http://localhost:8088/rest/consumer/SubscribeToMessage?Name=NameDay" # renvoi un ID de Souscription (subscriptionId) r = requests.get(url, headers=headers) if r.ok: subscriptionId = json.loads(r.content) print subscriptionId # relever les messages (timeout de 60s par défaut) url = "http://localhost:8088/rest/consumer/GetMessages?subscriptionId=" + str(subscriptionId) r = requests.get(url, headers=headers) if r.ok: rep = json.loads(r.content) # renvoi [] si pas de changement print rep """ Cdes_Rest = {'CheckAccess':'CheckAccess?','RequestStateObjects':'RequestStateObjects?',\ 'SubscribeStateObjects':'SubscribeStateObjects?','SubscribeToMessage':'SubscribeToMessage?',\ 'GetMessages':'GetMessages?' } class Constellation_REST(object): """ """ def __init__(self,IP='localhost',Port=8088): """ IP : adresse ip ou nom de domaine du site Port : port du serveur """ self.IP = IP self.Port = Port self.Headers = {} self.url = None def Init_Credential(self,AccessKey): """ permet de passer l'AccessKey sera envoyé dans le header """ self.Headers['AccessKey'] = AccessKey def Init_Sentinel(self,SentinelName): """ permet de le nom de la sentinelle sera envoyé dans le header """ self.Headers['SentinelName'] = SentinelName def Init_Package(self,PackageName): """ permet de le nom du package sera envoyé dans le header """ self.Headers['PackageName'] = PackageName def Check_Access(self): """ Vérifie l'access au serveur @return : True si ok sinon une erreur est générée """ self.Send_Get(Cdes_Rest['CheckAccess']) return True def Request_StateObject(self,SentinelName=None,PackageName=None,Name=None,Type=None): """ Permet de récupérer la valeur actuelle d’un ou de plusieurs StateObjects @param: SentinelName: nom de la sentinelle (si None, on utilise la sentinelle initialisée @param: PackageName: nom du PackageName (si None, on utilise le Package initialisée @param: Name: nom du StateObject (si None, le paramètre ne sera pas passé) @param: Type: type du StateObject (si None, le paramètre ne sera pas passé) """ ArgInfo =inspect.getargvalues(inspect.currentframe()) d = self.__Convert_Args_To_Dict__(ArgInfo[3]) cmd = o.__Construct_Cmd__('RequestStateObjects',**d) rep = self.Send_Get(cmd) return rep def Subscribe_StateObjects(self,SentinelName=None,PackageName=None,Name=None,Type=None): """ Permet de s'abonner à la valeur actuelle d’un ou de plusieurs StateObjects @param: SentinelName: nom de la sentinelle (si None, on utilise la sentinelle initialisée @param: PackageName: nom du PackageName (si None, on utilise le Package initialisée @param: Name: nom du StateObject (si None, le paramètre ne sera pas passé) @param: Type: type du StateObject (si None, le paramètre ne sera pas passé) @return le subscriptionId """ ArgInfo =inspect.getargvalues(inspect.currentframe()) d = self.__Convert_Args_To_Dict__(ArgInfo[3]) cmd = o.__Construct_Cmd__('SubscribeStateObjects',**d) rep = self.Send_Get(cmd) return rep def Subscribe_ToMessage(self,SentinelName=None,PackageName=None,Name=None,Type=None): """ Permet de s'abonner à des messages @param: SentinelName: nom de la sentinelle (si None, on utilise la sentinelle initialisée @param: PackageName: nom du PackageName (si None, on utilise le Package initialisée @param: Name: nom du StateObject (si None, le paramètre ne sera pas passé) @param: Type: type du StateObject (si None, le paramètre ne sera pas passé) @return le subscriptionId """ ArgInfo =inspect.getargvalues(inspect.currentframe()) d = self.__Convert_Args_To_Dict__(ArgInfo[3]) cmd = o.__Construct_Cmd__('SubscribeToMessage',**d) rep = self.Send_Get(cmd) return rep def GetMessages(self,subscriptionId,timeout=None,limit=None): """ Permet de s'abonner à des messages @param: subscriptionId: Id de souscription @param: timeout: temps maximal en milliseconde de la mise en attente de la requête (entre 1000ms et 120000ms) @param: limit: nombre maximum de message à retourner pour l’appel @return la réponse ou vide """ ArgInfo =inspect.getargvalues(inspect.currentframe()) d = self.__Convert_Args_To_Dict__(ArgInfo[3]) cmd = o.__Construct_Cmd__('GetMessages',**d) print cmd rep = self.Send_Get(cmd) return rep def __Construct_Cmd__(self,cmd,**kwargs): """ construit la commande à envoyer avec les arguments @param: cmd: @param: **kwargs: dictionnaire des arguments à passer @return la commande à passer """ s = "" for arg in kwargs: s += arg + "=" + str(kwargs[arg]) + "&" return Cdes_Rest[cmd] + s[:-1] def __Convert_Args_To_Dict__(self,dic): """ renvoi un dictionnaire dont les keys ne sont pas None @param: dic: dictionnaire des arguments issu de 'inspect' """ d = {} for key in dic: if dic[key] != None and key != "self" and key != "frame" and key != "cmd": d[key]= dic[key] return d def Send_Get(self,cde): """ envoi une commande au serveur @return le contenu de la réponse si OK """ self.__Create_Url__(cde) rep = requests.get(self.url, headers=self.Headers) print rep if rep.ok: if (rep.content): return json.loads(rep.content) else: return "" else: print rep.content return rep.raise_for_status() def __Create_Url__(self,cde): """ creation de l'url """ self.url = "http://" + self.IP + ":" + str(self.Port) + "/rest/consumer/" + cde o = Constellation_REST() o.Init_Credential('votre access code') o.Init_Sentinel('xxxxxx') o.Init_Package('DayInfo') print o.Check_Access() o.Request_StateObject(Name='NameDay') #print o.Subscribe_StateObjects(Name='NameDay') o.Init_Package('HWMonitor') SubscribeId = o.Subscribe_ToMessage(Name='/intelcpu/0/load/0') print o.url for i in range (5): print o.GetMessages(SubscribeId,timeout=5000) print o.Request_StateObject(Name='/intelcpu/0/load/0')