Exemple #1
0
    def run_cbq_query(self, query=None, min_output_size=10, server=None):
        if query is None:
            query = self.query
        if server is None:
           server = self.master
           if server.ip == "127.0.0.1":
            self.n1ql_port = server.n1ql_port
        else:
            if server.ip == "127.0.0.1":
                self.n1ql_port = server.n1ql_port
            if self.input.tuq_client and "client" in self.input.tuq_client:
                server = self.tuq_client
        query_params = {}
        cred_params = {'creds': []}
        rest = RestConnection(server)
        username = rest.username
        password = rest.password
        cred_params['creds'].append({'user': username, 'pass': password})
        for bucket in self.buckets:
            if bucket.saslPassword:
                cred_params['creds'].append({'user': '******' % bucket.name, 'pass': bucket.saslPassword})
        query_params.update(cred_params)
        if self.use_rest:
            query_params.update({'scan_consistency': self.scan_consistency})
            self.log.info('RUN QUERY %s' % query)

            if self.analytics:
                query = query + ";"
                for bucket in self.buckets:
                    query = query.replace(bucket.name,bucket.name+"_shadow")
                result = CBASHelper(self.cbas_node).execute_statement_on_cbas(query, "immediate")
                result = json.loads(result)

            else :
                result = rest.query_tool(query, self.n1ql_port, query_params=query_params)


        else:
            if self.version == "git_repo":
                output = self.shell.execute_commands_inside("$GOPATH/src/github.com/couchbase/query/" +\
                                                            "shell/cbq/cbq ","","","","","","")
            else:
                os = self.shell.extract_remote_info().type.lower()
                if not(self.isprepared):
                    query = query.replace('"', '\\"')
                    query = query.replace('`', '\\`')

                cmd =  "%s/cbq  -engine=http://%s:%s/ -q -u %s -p %s" % (self.path, server.ip, server.port, username, password)

                output = self.shell.execute_commands_inside(cmd,query,"","","","","")
                if not(output[0] == '{'):
                    output1 = '{'+str(output)
                else:
                    output1 = output
                result = json.loads(output1)
        if isinstance(result, str) or 'errors' in result:
            raise CBQError(result, server.ip)
        self.log.info("TOTAL ELAPSED TIME: %s" % result["metrics"]["elapsedTime"])
        return result
Exemple #2
0
 def run_cbq_query(self, query=None, min_output_size=10, server=None):
     if query is None:
         query = self.query
     if server is None:
         server = self.master
         if server.ip == "127.0.0.1":
             self.n1ql_port = server.n1ql_port
     else:
         if server.ip == "127.0.0.1":
             self.n1ql_port = server.n1ql_port
         if self.input.tuq_client and "client" in self.input.tuq_client:
             server = self.tuq_client
     if self.n1ql_port == None or self.n1ql_port == '':
         self.n1ql_port = self.input.param("n1ql_port", 8093)
         if not self.n1ql_port:
             self.log.info(
                 " n1ql_port is not defined, processing will not proceed further"
             )
             raise Exception(
                 "n1ql_port is not defined, processing will not proceed further"
             )
     if self.use_rest:
         result = RestConnection(server).query_tool(query, self.n1ql_port)
     else:
         if self.version == "git_repo":
             output = self.shell.execute_commands_inside("$GOPATH/src/github.com/couchbaselabs/tuqtng/" +\
                                                         "tuq_client/tuq_client " +\
                                                         "-engine=http://%s:8093/" % server.ip,
                                                    subcommands=[query,],
                                                    min_output_size=20,
                                                    end_msg='tuq_client>')
         else:
             output = self.shell.execute_commands_inside(
                 "/tmp/tuq/cbq -engine=http://%s:8093/" % server.ip,
                 subcommands=[
                     query,
                 ],
                 min_output_size=20,
                 end_msg='cbq>')
         result = self._parse_query_output(output)
     if isinstance(result, str) or 'errors' in result:
         raise CBQError(result, server.ip)
     self.log.info("TOTAL ELAPSED TIME: %s" %
                   result["metrics"]["elapsedTime"])
     return result
 def run_cbq_query(self,
                   query=None,
                   min_output_size=10,
                   server=None,
                   query_params={},
                   is_prepared=False,
                   scan_consistency=None,
                   scan_vector=None,
                   verbose=True):
     if query is None:
         query = self.query
     if server is None:
         server = self.master
         if server.ip == "127.0.0.1":
             self.n1ql_port = server.n1ql_port
     else:
         if server.ip == "127.0.0.1":
             self.n1ql_port = server.n1ql_port
         if self.input.tuq_client and "client" in self.input.tuq_client:
             server = self.tuq_client
     if self.n1ql_port == None or self.n1ql_port == '':
         self.n1ql_port = self.input.param("n1ql_port", 90)
         if not self.n1ql_port:
             self.log.info(
                 " n1ql_port is not defined, processing will not proceed further"
             )
             raise Exception(
                 "n1ql_port is not defined, processing will not proceed further"
             )
     if self.use_rest:
         query_params = {}
         if scan_consistency:
             query_params['scan_consistency'] = scan_consistency
         if scan_vector:
             query_params['scan_vector'] = str(scan_vector).replace(
                 "'", '"')
         if verbose:
             self.log.info('RUN QUERY %s' % query)
         result = RestConnection(server).query_tool(
             query,
             self.n1ql_port,
             query_params=query_params,
             is_prepared=is_prepared,
             verbose=verbose)
     else:
         # if self.version == "git_repo":
         #     output = self.shell.execute_commands_inside("$GOPATH/src/github.com/couchbaselabs/tuqtng/" +\
         #                                                 "tuq_client/tuq_client " +\
         #                                                 "-engine=http://%s:8093/" % server.ip,
         #                                            subcommands=[query,],
         #                                            min_output_size=20,
         #                                            end_msg='tuq_client>')
         # else:
         #os = self.shell.extract_remote_info().type.lower()
         shell = RemoteMachineShellConnection(server)
         #query = query.replace('"', '\\"')
         #query = query.replace('`', '\\`')
         #if os == "linux":
         cmd = "%s/cbq  -engine=http://%s:8093/" % (
             testconstants.LINUX_COUCHBASE_BIN_PATH, server.ip)
         output = shell.execute_commands_inside(cmd, query, "", "", "", "",
                                                "")
         print(
             "--------------------------------------------------------------------------------------------------------------------------------"
         )
         print(output)
         result = json.loads(output)
         print(result)
         result = self._parse_query_output(output)
     if isinstance(result, str) or 'errors' in result:
         error_result = str(result)
         length_display = len(error_result)
         if length_display > 500:
             error_result = error_result[:500]
         raise CBQError(error_result, server.ip)
     self.log.info("TOTAL ELAPSED TIME: %s" %
                   result["metrics"]["elapsedTime"])
     return result
    def run_analytics_query(self,
                            query=None,
                            min_output_size=10,
                            server=None,
                            query_params={},
                            is_prepared=False,
                            scan_consistency=None,
                            scan_vector=None,
                            verbose=False):
        if query is None:
            query = self.query
        if server is None:
            server = self.master
            if server.ip == "127.0.0.1":
                self.analytics_port = server.analytics_port
        else:
            if server.ip == "127.0.0.1":
                self.analytics_port = server.analytics_port
            if self.input.tuq_client and "client" in self.input.tuq_client:
                server = self.tuq_client
        if self.analytics_port == None or self.analytics_port == '':
            self.analytics_port = self.input.param("analytics_port", 8095)
            if not self.analytics_port:
                self.log.info(
                    " analytics_port is not defined, processing will not proceed further"
                )
                raise Exception(
                    "analytics_port is not defined, processing will not proceed further"
                )
        if self.use_rest:
            query_params = {}
            if scan_consistency:
                query_params['scan_consistency'] = scan_consistency
            if scan_vector:
                query_params['scan_vector'] = str(scan_vector).replace(
                    "'", '"')
            if verbose:
                self.log.info('RUN QUERY %s' % query)
            query = query + ";"
            if "USE INDEX" in query:
                query = query.replace("USE INDEX(`#primary` USING GSI)", " ")
            for bucket in self.buckets:
                query = query.replace(bucket.name + " ",
                                      bucket.name + "_shadow ")

            self.log.info(" CBAS QUERY :: {0}".format(query))
            result = RestConnection(server).analytics_tool(
                query,
                self.analytics_port,
                query_params=query_params,
                verbose=verbose)

        if isinstance(result, str) or 'errors' in result:
            error_result = str(result)
            length_display = len(error_result)
            if length_display > 500:
                error_result = error_result[:500]
            raise CBQError(error_result, server.ip)
        self.log.info("TOTAL ELAPSED TIME: %s" %
                      result["metrics"]["elapsedTime"])
        return result
    def run_cbq_query(self,
                      query=None,
                      min_output_size=10,
                      server=None,
                      query_params={},
                      is_prepared=False,
                      encoded_plan=None):
        self.log.info("-" * 100)
        if query is None:
            query = self.query
        if server is None:
            server = self.master
            if self.input.tuq_client and "client" in self.input.tuq_client:
                server = self.tuq_client
        cred_params = {'creds': []}
        for bucket in self.buckets:
            if bucket.saslPassword:
                cred_params['creds'].append({
                    'user': '******' % bucket.name,
                    'pass': bucket.saslPassword
                })
        query_params.update(cred_params)
        if self.use_rest:
            query_params.update({'scan_consistency': self.scan_consistency})
            self.log.info('RUN QUERY %s' % query)
            if hasattr(self, 'query_params') and self.query_params:
                query_params = self.query_params

            if self.analytics:
                query = query + ";"
                for bucket in self.buckets:
                    query = query.replace(bucket.name, bucket.name + "_shadow")
                self.log.info('RUN QUERY %s' % query)
                result = RestConnection(server).analytics_tool(
                    query,
                    8095,
                    query_params=query_params,
                    is_prepared=is_prepared,
                    named_prepare=self.named_prepare,
                    encoded_plan=encoded_plan,
                    servers=self.servers)

            else:
                result = RestConnection(server).query_tool(
                    query,
                    self.n1ql_port,
                    query_params=query_params,
                    is_prepared=is_prepared,
                    named_prepare=self.named_prepare,
                    encoded_plan=encoded_plan,
                    servers=self.servers)
        else:
            if self.version == "git_repo":
                output = self.shell.execute_commands_inside("$GOPATH/src/github.com/couchbase/query/" +\
                                                            "shell/cbq/cbq ","","","","","","")
            else:
                if not (self.isprepared):
                    query = query.replace('"', '\\"')
                    query = query.replace('`', '\\`')
                    if "system" in query:
                        cmd = "%s/cbq  -engine=http://%s:8091/ -q -u Administrator -p password" % (
                            self.path, server.ip)
                    else:
                        cmd = "%s/cbq  -engine=http://%s:8091/ -q" % (
                            self.path, server.ip)

                    output = self.shell.execute_commands_inside(
                        cmd, query, "", "", "", "", "")
                    if not (output[0] == '{'):
                        output1 = '{' + str(output)
                    else:
                        output1 = output
                    result = json.loads(output1)
        if isinstance(result, str) or 'errors' in result:
            raise CBQError(result, server.ip)
        if 'metrics' in result:
            self.log.info("TOTAL ELAPSED TIME: %s" %
                          result["metrics"]["elapsedTime"])
        return result