import time import datetime import pymongo from MG.tools.postgis_api import External_PostGis import re from threading import Thread from django.conf import settings from tools.envConf.def_conf import * con_required_values = {'user': False, 'host': False, 'port': False, 'password': True, 'dbname': False} def update_mongo(mongo_client, layer_to_update): databases = mongo_client["IpsilumMaps"] layers = databases["Layers"] layers.update({"name": layer_to_update}, {"$set": {"updatedAt": "{}".format(datetime.datetime.now().isoformat())}}) def read_from_pg(): env_conf = settings.ENV_CONF ip = env_conf[PG_HOST] port = env_conf[PG_PORT] user = env_conf[PG_USER] passwd = env_conf[PG_PASSW] db = 'Proyecto_mexico' schema = ' datos_mex' table_ori = 'user_line_mexico' table_new = 'user_point_mexico' conn = External_PostGis(ip, port, user, passwd, db, schema, table_ori) list_tables = conn.list_tables(attribute='tablename', attributeValue=table_new) if len(list(list_tables)) == 0: cur = conn.connexion.cursor() cmd = """create table "{}"."{}" ( id serial PRIMARY KEY, user_name character varying(10), wkb_geometry geometry(point,4326) ) ; """.format(schema, table_new) cur.execute(cmd) conn.connexion.commit() atr = conn.select_by_attribute(schema, table_ori, 'usuario,ST_AsText(wkb_geometry)') for index, i in enumerate(atr): t = Thread(name="thread:{}".format(index), target=run_thread, args=(i, conn, schema, table_new)) t.daemon = True t.start() time.sleep(0.1) r = Thread(name="refresh", target=refresh, args=()) r.daemon = True r.start() def refresh(): while True: mongo_client = pymongo.MongoClient("mongodb://192.168.1.43:27017/") update_mongo(mongo_client, 'Real_Time_Point__0') time.sleep(5) def run_thread(atr, conn, schema, table_new): while True: point_array = re.split('[,/(/)]', atr[1]) for j in point_array[1:-1]: update_point(atr[0], j, conn, schema, table_new) time.sleep(5) def update_point(id_user, point, conn, schema, table_new): point_array = point.split() wkt_geom = 'POINT ({} {})'.format(point_array[0], point_array[1]) cur = conn.connexion.cursor() cmd = """SELECT {} FROM "{}"."{}" where user_name = '{}';""".format('user_name', schema, table_new, id_user) cur.execute(cmd) conn.connexion.commit() if len(list(cur)) == 0: cur = conn.connexion.cursor() cmd = """INSERT INTO "{}"."{}" (user_name,wkb_geometry ) VALUES ('{}' , ST_GeomFromText('{}',4326));""".format( schema, table_new, id_user, wkt_geom) cur.execute(cmd) conn.connexion.commit() else: cur = conn.connexion.cursor() cmd = """UPDATE "{}"."{}" SET user_name = '{}', wkb_geometry = ST_GeomFromText('{}',4326) WHERE user_name = '{}';""".format(schema, table_new, id_user, wkt_geom, id_user) cur.execute(cmd) conn.connexion.commit() def main(): read_from_pg()