Ejemplo n.º 1
0
Archivo: sql.py Proyecto: brtsz/zato
def _create(server_address, params):
    """ Creates a new SQL connection pool.
    """
    logger.info("About to create an SQL connection pool, server_address=[%s], params=[%s]" % (server_address, params))

    zato_message = _get_edit_create_message(params)
    invoke_admin_service(server_address, "zato:pool.sql.create", etree.tostring(zato_message))

    logger.info("Created SQL connection pool, server_address=[%s], params=[%s]" % (server_address, params))
Ejemplo n.º 2
0
Archivo: sql.py Proyecto: brtsz/zato
def _edit(server_address, params):
    """ Updates SQL connection pool's parameters (everything except for the password).
    """
    logger.info("About to change an SQL connection pool, server_address=[%s], params=[%s]" % (server_address, params))
    zato_message = _get_edit_create_message(params, "edit-")

    # original_pool_name is needed only by 'edit'.
    zato_message.pool.original_pool_name = params.get("edit-original_pool_name")
    invoke_admin_service(server_address, "zato:pool.sql.edit", etree.tostring(zato_message))

    logger.info("Saved changes to SQL connection pool, server_address=[%s], params=[%s]" % (server_address, params))
Ejemplo n.º 3
0
Archivo: sql.py Proyecto: brtsz/zato
def _change_password(server_address, params):
    """ Changes the SQL connection pool's password.
    """
    params_no_passwords = copy.deepcopy(params)
    params_no_passwords["password1"] = "***"
    params_no_passwords["password2"] = "***"

    logger.info("About to change an SQL connection pool password, server_address=[%s], params=[%s]" % (server_address, params_no_passwords))

    config_pub_key = str(params["config_pub_key"])
    encrypted_password1 = encrypt(params["password1"], config_pub_key)
    encrypted_password2 = encrypt(params["password2"], config_pub_key)

    zato_message = Element("{%s}zato_message" % zato_namespace)
    zato_message.pool_name = params["pool_name"]
    zato_message.password1 = encrypted_password1
    zato_message.password2 = encrypted_password2

    invoke_admin_service(server_address, "zato:pool.sql.change-password", etree.tostring(zato_message))
Ejemplo n.º 4
0
Archivo: sql.py Proyecto: brtsz/zato
def _ping_delete(req, soap_action):
    """ Code common to both deleting and pinging connection pools.
    """
    server_id = req.GET.get("server")
    pool_name = req.GET.get("pool_name")

    if not server_id:
        raise ZatoException("No 'server' parameter found, req.GET=[%s]" % req.GET)

    if not pool_name:
        raise ZatoException("No 'pool_name' parameter found, req.GET=[%s]" % req.GET)

    server = Server.objects.get(id=server_id)
    zato_message = Element("{%s}zato_message" % zato_namespace)
    zato_message.pool_name = pool_name

    return invoke_admin_service(server.address, soap_action, etree.tostring(zato_message))
Ejemplo n.º 5
0
Archivo: sql.py Proyecto: brtsz/zato
def index(req):
    """ Lists SQL connection pools and dispatches the management requests
    (create, edit and change_password).
    """

    zato_servers = Server.objects.all().order_by("name")
    pools = []
    config_pub_key = ""
    server_id = None

    choose_server_form = ChooseClusterForm(zato_servers, req.GET)
    edit_form = SQLConnectionPoolForm(prefix="edit")

    # Build a list of SQL connection pools for a given Zato server.
    server_id = req.GET.get("server")
    if server_id and req.method == "GET":

        # We have a server to pick the connection pools from, try to
        # invoke it now.
        server = Server.objects.get(id=server_id)
        _ignored, zato_message, soap_response = invoke_admin_service(server.address, "zato:pool.sql.get-list")

        # Config pub key is always needed.
        config_pub_key = zato_path("envelope.config_pub_key", True).get_from(zato_message)

        if zato_path("data.pool_list.pool").get_from(zato_message) is not None:

            for pool in zato_message.data.pool_list.pool:
                    original_pool_name = unicode(pool.pool_name)
                    pool_name = unicode(pool.pool_name)
                    engine = unicode(pool.engine)
                    engine_friendly = engine_friendly_name[str(engine)]
                    user = unicode(pool.user)
                    host = unicode(pool.host)
                    db_name = unicode(pool.db_name)
                    pool_size = pool.pool_size

                    if path("pool.extra.item").get_from(pool) is not None:
                        logger.log(TRACE1, "Found 'extra.item' in the response, pool_name=[%s]" % pool_name)
                        extra = []
                        for extra_elem in pool.extra.item:
                            extra.append(unicode(extra_elem))
                        extra = "\n".join(extra)
                    else:
                        logger.log(TRACE1, "No 'extra.item' found in the response, pool_name=[%s]" % pool_name)
                        extra = ""

                    pool = SQLConnectionPool(uuid4().hex, original_pool_name,
                                             pool_name, engine, engine_friendly, user,
                                             host, db_name, pool_size, extra)
                    pools.append(pool)
        else:
            logger.info("No pools found, soap_response=[%s]" % soap_response)

    if req.method == "POST":

        action = req.POST.get("zato_action")
        if not action:
            msg = "Missing 'zato_action' parameter in req.POST"
            logger.error(msg)
            return HttpResponseServerError(msg)

        if not server_id:
            msg = "Parameter 'server' is missing in GET data."

            if action != "change_password":
                msg += " Action [%s], req.POST=[%s], req.GET=[%s]" % (action, pprint(req.POST), pprint(req.GET))

            logger.error(msg)
            return HttpResponseServerError(msg)

        server = Server.objects.get(id=server_id)

        handler = globals().get("_" + action)
        if not handler:
            msg = "No handler found for action [%s]." % action

            if action != "change_password":
                msg += " req.POST=[%s], req.GET=[%s]" % (pprint(req.POST), pprint(req.GET))

            logger.error(msg)
            return HttpResponseServerError(msg)

        # Finally, invoke the action handler.
        try:
            response = handler(server.address, req.POST)
            response = response if response else ""
            return HttpResponse(response)
        except Exception, e:
            msg = "Could not invoke action [%s], e=[%s]. " % (action, format_exc())

            if action != "change_password":
                msg += " req.POST=[%s], req.GET=[%s]" % (pprint(req.POST), pprint(req.GET))

            logger.error(msg)
            return HttpResponseServerError(msg)