Пример #1
0
class StoreInspector(object):
    def __init__(self,
                 host='localhost',
                 port='8089',
                 scheme='https',
                 username='******',
                 password='******'):
        self._service = Service(owner='nobody',
                                app='amp4e_events_input',
                                scheme=scheme,
                                host=host,
                                port=port,
                                username=username,
                                password=password)
        # self._service = Service(owner='nobody', app='amp4e_events_input', scheme='https', host='localhost', port='8089',
        #                         username='******', password='******')
        self._service.login()
        self.collection = self._service.kvstore['AmpEventStreams']

    def list_collections(self):
        for collection in self._service.kvstore:
            print "  {}".format(collection.name)

    def list_records_within_amp_collection(self, query=None):
        if query is None:
            query = {}
        print json.dumps(self.collection.data.query(query=json.dumps(query)),
                         indent=1)
Пример #2
0
    def from_url(cls, server_uri, stanza):

        parts = urllib.parse.urlparse(server_uri)
        scheme = parts.scheme
        host = parts.hostname
        port = parts.port

        service = Service(
            scheme=scheme,
            host=host,
            port=port,
            username=parts.username,
            password=parts.password,
        )
        service.login()

        server_scheme = scheme
        server_host = host
        server_port = port
        token = service.token
        log_dir = environ.get_log_folder()

        kind, name = cls._split_stanza(stanza)
        inputs = list()
        for item in service.inputs:
            if item.kind != kind:
                continue
            if item.name != name:
                continue
            stanza = Stanza(kind, name, item.content)
            inputs.append(stanza)

        checkpoint_dir = environ.get_checkpoint_folder(kind)
        return cls(server_scheme, server_host, server_port, token,
                   checkpoint_dir, log_dir, inputs)
Пример #3
0
def set_service():
    global service
    splunkd_uri = calculate_local_splunkd_protocolhostport()
    token = cli_get_sessionkey(splunkd_uri)
    if token is None:
        logging.error('Please log in first by running `bin/splunk login`.')
        sys.exit(1)

    splunkd = urlsplit(splunkd_uri, allow_fragments=False)

    service = Service(owner='nobody',
                      scheme=splunkd.scheme,
                      host=splunkd.hostname,
                      port=splunkd.port,
                      token=token)
    service.login()

    return True
Пример #4
0
class TestWrapperWithConnection(unittest.TestCase):
    COLLECTION_NAME = 'TestAmpEventStreams'

    def setUp(self):
        AmpStorageWrapper.COLLECTION_NAME = self.COLLECTION_NAME
        self.service = Service(owner='nobody',
                               app='amp4e_events_input',
                               scheme=SPLUNK_AUTH_OPTIONS['scheme'],
                               host=SPLUNK_AUTH_OPTIONS['host'],
                               port=SPLUNK_AUTH_OPTIONS['port'],
                               username=SPLUNK_AUTH_OPTIONS['username'],
                               password=SPLUNK_AUTH_OPTIONS['password'])
        self.service.login()
        self.service.kvstore.create(self.COLLECTION_NAME)
        self.metadata = MockDefinitions(self.service.token).metadata
        self.stream_representation = {'input_name': self.metadata['name']}
        self.storage = AmpStorageWrapper(self.metadata)

    def tearDown(self):
        self.service.kvstore.delete(self.COLLECTION_NAME)

    def test_collection(self):
        self.assertIsInstance(self.storage.collection, KVStoreCollection)
        self.assertIn(self.COLLECTION_NAME,
                      [x.name for x in self.service.kvstore])

    def test_find_stream(self):
        self.__create_stream()
        self.assertEqual(self.storage.find_stream()['input_name'],
                         self.stream_representation['input_name'])

    # returns None if stream cannot be found
    def test_find_stream_none(self):
        self.assertIsNone(self.storage.find_stream())

    def test_find_stream_other_query(self):
        new_data = {'custom_field': '1234'}
        new_representation = self.stream_representation.copy()
        new_representation.update(new_data)
        self.__create_stream(new_representation)
        found_stream = self.storage.find_stream(new_data)
        self.assertEqual(found_stream['input_name'],
                         self.stream_representation['input_name'])
        self.assertEqual(found_stream['custom_field'],
                         new_data['custom_field'])

    def test_delete_stream(self):
        self.__create_stream()
        self.storage.delete_stream()
        self.assertEqual(
            self.service.kvstore[self.COLLECTION_NAME].data.query(
                query=json.dumps(self.stream_representation)), [])

    # does not raise error if stream does not exist
    def test_delete_stream_none(self):
        self.storage.delete_stream()

    def test_save_stream_with_data_create(self):
        additional_data = {'test_key': 'test_value'}
        self.assertEqual(
            self.service.kvstore[self.COLLECTION_NAME].data.query(
                query=json.dumps(self.stream_representation)), [])
        self.storage.save_stream_with_data(additional_data)
        streams = self.service.kvstore[self.COLLECTION_NAME].data.query(
            query=json.dumps(self.stream_representation))
        self.assertEqual(len(streams), 1)
        stream = streams[0]
        self.assertEqual(stream['input_name'],
                         self.stream_representation['input_name'])
        self.assertEqual(stream['test_key'], additional_data['test_key'])

    def test_save_stream_with_data_update(self):
        self.__create_stream()
        self.assertEqual(
            len(self.service.kvstore[self.COLLECTION_NAME].data.query(
                query=json.dumps(self.stream_representation))), 1)
        additional_data = {'test_key': 'test_value'}
        self.storage.save_stream_with_data(additional_data)
        streams = self.service.kvstore[self.COLLECTION_NAME].data.query(
            query=json.dumps(self.stream_representation))
        self.assertEqual(len(streams), 1)
        stream = streams[0]
        self.assertEqual(stream['input_name'],
                         self.stream_representation['input_name'])
        self.assertEqual(stream['test_key'], additional_data['test_key'])

    def __create_stream(self, query=None):
        query = query if query is not None else self.stream_representation
        self.service.kvstore[self.COLLECTION_NAME].data.insert(
            json.dumps(query))