def signup(): #1. 받은 데이터의 키가 모두 존재하나 검사한다. #2. 일단 받아온 그룹이 존재하나 확인한다. #3. 그룹이 존재하지 않는다면 그룹을 등록한다. #4. 해당 그룹 아래에 엘리먼트를 등록하면서 랜덤 md5 를 생성한다. #5. 해당 엘리먼트의 하위에 하드웨어들을 등록하면서 랜덤 SHA1 을 등록한다. #6. 해당 하드웨어의 장치에 따라서 얻어올 센서값은 정해져 있으므로 # 해당 센서값들을 하드웨어 종류에 맟춰서 등록한다. # 하드디스크의 SMART 값은 통쨰로 저장하는게 옳다. results = {} #1. 받은 데이터의 키가 모두 존재하나 검사한다. data = json.loads(request.data) arguments = ["MachineName", "LocalIPAddress", "GlobalIPAddress", "GatewayIPAddress", "GroupFingerprint", "HardwareList", "CoreComponent_CPU", "CoreComponent_Mainboard", "CoreComponent_GPU"] data_keys = data.keys() for argument in arguments: if argument not in data_keys: raise abort(400) #2. 일단 받아온 그룹이 존재하나 확인한다. element_md5 = "%032x" % random.getrandbits(128) group = db.query(Groups).filter_by(identifier=data["GroupFingerprint"]).first() if not group: #3. 그룹이 존재하지 않는다면 그룹을 등록한다. # 그다음 엘리먼트를 추가한다. try: with db.begin_nested(): g = Groups(identifier=data["GroupFingerprint"], cpu=data["CoreComponent_CPU"], mainboard=data["CoreComponent_Mainboard"], gpu=data["CoreComponent_GPU"]) db.add(g) db.flush() e = Elements(group_id=g.id, fingerprint=element_md5, machine_name=data["MachineName"], ip_address_local=data["LocalIPAddress"], ip_address_global=data["GlobalIPAddress"], ip_address_gateway=data["GatewayIPAddress"]) db.add(e) except Exception, e: print str(e) raise abort(500)
#5. 해당 엘리먼트의 하위에 하드웨어들을 등록하면서 랜덤 SHA1 을 등록한다. hws = data["HardwareList"] hws_sha1_dict = {} for hw_name in hws.keys(): rsha1 = hashlib.sha1(str(random.random())).hexdigest() if hws[hw_name] == "CPU": #CPU 부하 #CPU 온도 #CPU 전력사용량 try: with db.begin_nested(): h = Hardwares(element_id=e.id, fingerprint=rsha1, \ type=0, hardware_name=hw_name) db.add(h) db.flush() hws_sha1_dict[hw_name] = rsha1 s1 = Sensors(hardware_id=h.id, type=0, \ sensor_name="Core Load") db.add(s1) s2 = Sensors(hardware_id=h.id, type=1, \ sensor_name="Core Temperature") db.add(s2) s3 = Sensors(hardware_id=h.id, type=2, \ sensor_name="Core Power") db.add(s3) s4 = Sensors(hardware_id=h.id, type=4, \ sensor_name="Core TempPerLoad") db.add(s4) s5 = Sensors(hardware_id=h.id, type=5, \ sensor_name="Core PowerPerLoad")