def create_plant(data): try: Plant.get(Plant.ip == data['ip']) except: from models.mesh import MeshObject discovered = MeshObject.get(ip=data['ip']) plant = Plant() plant.name = data['name'].lower() plant.location = data['location'] plant.species = data['species'] plant.interval = data['interval'] plant.person = Person.get(Person.email == data['email']) plant.ip = data['ip'] plant.sat_streak = 0 if 'uuid' in data: plant.uuid = data['uuid'] if 'persistant_hold' in data: plant.persistant_hold = data['persistant_hold'] if not discovered.master: if 'role' not in data: master = Plant.get(localhost=True) else: master = Plant.get(uuid=data['role']) plant.role = str(master.uuid) plant.save() local_plant = Plant.get(Plant.localhost == True) for model in [SensorStatus, SensorCount, SensorSatisfactionValue, PlantNetworkUptime]: copy_model_instance_from_localhost(plant, model, model.plant == local_plant) for count in list(SensorCount.select().where(SensorCount.plant == plant)): count.count = 0 count.save() for uptime in list(PlantNetworkUptime.select().where(PlantNetworkUptime.plant == plant)): uptime.overall = 0 uptime.current = 0 uptime.save() return plant
if Plant.select().count() == 0: print('CREATE FIRST PLANT: \n\n') plant = Plant() plant.name = input('How do you want to call your first plant? ').lower() plant.location = input('The location? ').lower() plant.species = input('The species? ').lower() def interval(): int_interval = input('emailing interval? (int) (h) ') if int_interval.isdigit() is True: return int(int_interval) else: return interval() plant.interval = interval() person = Person() print('\nto:') person.name = input(' Name: ') person.email = input(' Email: ') person.wizard = True person.save() print('\n') plant.person = person s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("gmail.com", 80)) plant.ip = s.getsockname()[0]
from models.plant import Plant, Person from models.mesh import MeshMessage from playhouse.shortcuts import model_to_dict plant = Plant() plant.name = 'marta' plant.location = 'table' plant.species = 'tulpe' plant.interval = 6 plant.person = Person.get(Person.wizard == True) plant.ip = '192.168.178.54' plant.uuid = '91c9280b76c142a393eb85250065230f' plant.localhost = True # plant.id = 1 plant.sat_streak = 0 plant.save() print(str(plant.uuid))
def plants(): # GET: select: minimal, normal, detailed, extensive, master, satisfaction, default (normal) # GET: dict: Boolean if request.method == 'GET': data, code = get_data(required=PLANTS_GET, restrictive=True, hardmode=True) if code == 400: return data_formatting(400) selector = data['select'] mode = data['dict'] root_plants = Plant.select().dicts() collection = {} for selected in selector: plants = root_plants.where( Plant.role == 'master') if selected == 'master' else root_plants plants = list(plants) output = [] if selected not in ['satisfaction', 'sensorsatisfaction']: for plant in plants: used = [] if selected in [ 'minimal', 'normal', 'detailed', 'extensive', 'master' ]: used.append('uuid') if selected in [ 'normal', 'detailed', 'extensive', 'master' ]: used.append('name') if selected in ['detailed', 'extensive', 'master']: used.append('role') used.append('localhost') if selected in ['extensive', 'master']: used.append('active') data = [] if not mode else {} for use in used: if isinstance(plant[use], UUID): plant[use] = str(plant[use]) if not mode: data.append(plant[use]) else: data[use] = plant[use] output.append(data) elif selected in ['satisfaction', 'sensorsatisfaction']: output = {} sensors = Sensor.select() for plant in plants: host = None if plant['role'] != 'master': host = Plant.get(Plant.uuid == plant['role']) if selected == 'satisfaction': statuses = [] else: output[str(plant['uuid'])] = {} for sensor in sensors: target = Plant.get(uuid=plant['uuid']) if sensor.name not in slave_supported and host is not None: target = host status = SensorStatus.get( SensorStatus.sensor == sensor, SensorStatus.plant == target) if selected == 'satisfaction': inserted = 1 if status.level.label == 'threat': inserted = 3 elif status.level.label == 'cautioning': inserted = 2 statuses.append(inserted) else: if status.level.label not in output[str( plant['uuid'])]: output[str( plant['uuid'])][status.level.label] = [] output[str( plant['uuid'])][status.level.label].append({ 'name': sensor.name, 'uuid': str(sensor.uuid) }) if selected == 'satisfaction': maximum = max(statuses) label = 'optimum' if maximum == 3: label = 'threat' elif maximum == 2: label = 'cautioning' output[str(plant['uuid'])] = { 'streak': plant['sat_streak'], 'name': label } if len(selector) > 1: collection[selected] = output if len(collection.keys()) != 0: output = collection return data_formatting(data=output) else: # PUT: register: true data, code = get_data(required=PLANTS_PUT, restrictive=True) if code == 400: return data_formatting(400) register = data['register'] plants = list(Plant.select(Plant.ip == data['ip']).dicts()) discovered = MeshObject.get(ip=data['ip']) if plants.count() == 0: return data_formatting(304) plant = Plant() plant.name = data['name'] plant.location = data['location'] plant.species = data['species'] plant.interval = data['interval'] plant.person = Person.get(email=data['email']) plant.ip = data['ip'] plant.sat_streak = 0 if data['uuid'] != '': plant.uuid = data['uuid'] if data['persistant_hold'] != '': plant.persistant_hold = data['persistant_hold'] if not discovered.master: if data['role'] == '': master = Plant.get(localhost=True) else: master = Plant.get(uuid=data['role']) plant.role = str(master.uuid) plant.save() local_plant = Plant.get(localhost=True) for model in [ SensorStatus, SensorCount, SensorSatisfactionValue, PlantNetworkUptime ]: copy_model_instance_from_localhost(plant, model, model.plant == local_plant) for count in list( SensorCount.select().where(SensorCount.plant == plant)): count.count = 0 count.save() for uptime in list(PlantNetworkUptime.select().where( PlantNetworkUptime.plant == plant)): uptime.overall = 0 uptime.current = 0 uptime.save() if register: MeshDedicatedDispatch().register(plant) return data_formatting()