예제 #1
0
 def test_search_string_exsistint_string_return_True(self):
     ''' поиск существующеего текста в логе '''
     text_to_search = '291894706'
     self.fe = FileExplorer(open, DATA_43_LOG)
     is_found = self.fe.search_string(text_to_search)
     self.assertTrue(is_found, 'существующий в логе текст не найден')
     self.assertEqual(self.fe.cur_line_index, 35419,
                      'неправильный индекс у найденной строки')
예제 #2
0
 def __init__(self, port):
     ip = getCurrMachineIp()
     self.username, self.password = None, None
     self.socket = zhelper.newServerSocket(zmq.REP, ip, port)
     self.db = Db("TrackerDB")
     self.uploader = Uploader(self.socket, self.db)
     self.downloader = Downloader(self.socket, self.db)
     self.fileExplorer = FileExplorer(self.socket, self.db)
예제 #3
0
def get_file_explorer():
    # ensure required options
    if get_config(CONFIG_OPTION_PORT) == None:
        raise click.BadParameter("Missing option '-p' / '--port'")
    if get_config(CONFIG_OPTION_BAUD) == None:
        raise click.BadParameter("Missing option '-b' / '--baud'")
    port = get_config(CONFIG_OPTION_PORT)
    if platform.system() == "Windows":
        port = windows_full_port_name(port)
    return FileExplorer(port, get_config(CONFIG_OPTION_BAUD))
예제 #4
0
class ClientHandler:
    def __init__(self, port):
        ip = getCurrMachineIp()
        self.username, self.password = None, None
        self.socket = zhelper.newServerSocket(zmq.REP, ip, port)
        self.db = Db("TrackerDB")
        self.uploader = Uploader(self.socket, self.db)
        self.downloader = Downloader(self.socket, self.db)
        self.fileExplorer = FileExplorer(self.socket, self.db)
        
    def handleRequest(self):
        """
            syncrounous (blocking) function, waits until receiving an action, handle it and return
        """
        clientRequestInfo = self.socket.recv_json()
        userToken = clientRequestInfo.get("token")
        if not self._authenticate(userToken):
            print("authentication error")
            return
        
        function = clientRequestInfo.get("function")
        if function == "ls":
            self.fileExplorer.explore(self.socket, self.username)
        elif function == "download":
            fileName = clientRequestInfo.get("fileName")
            self.uploader.upload(fileName, self.username)
        elif function == "upload":
            self.downloader.download()
        else:
            print("not correct function: ", function, " should be one of 'download, upload, ls'")
            self.socket.send_string("Either you don't send a function or it is not a valid function")

    def _authenticate(self, userToken):
        if not userToken:
            print("no user token is supplied: ", userToken)
            self.socket.send_string("you should provide a token")
            return False
        self.username, self.password = decodeToken(userToken)
        if not self.username:
            print("can't decode the token: ", userToken)
            self.socket.send_string("Invalid token")
            return False
        return True
예제 #5
0
def print_200_lines_of_log(server, port, auth, logs_dir, log_file_mask,
                           line_id):
    ''' Подключается по SFTP к указанному серверу, ищет в указанной папке по указанной маске файлы
    Ищет в этих файлах первое вхождение указанного идентификатора и печатает -100 строк от него, саму строку и +100 строк от нее
        server - IP сервера где лежит лог
        port - SSH порт
        auth - user / password
        logs_dir - папка, где лежат файлы
        log_file_mask - маска путей к лог файлу на основе Unix-wildcards.
        line-id - уникальный ID для строки в файле, по которому будет производится поиск
    '''
    line_id = str(line_id)

    trace('Connect to {0}:{1}'.format(server, port))
    with Sftp(server, port, auth) as sftp:

        trace("Search for logs in '{0}' by mask '{1}'".format(
            logs_dir, log_file_mask))
        logs = sftp.search(logs_dir, log_file_mask)

        if len(logs) == 0:
            trace('No logs has been found.')
            return

        trace('Logs has been found: {0}'.format(len(logs)))
        for log_path in logs:
            trace('Open log: {0}'.format(log_path))
            with FileExplorer(sftp.open, log_path, 'utf-8') as log:

                if log.search_string(line_id):
                    trace(
                        "'{0}' string has been found. Print 100 line up and down of it"
                        .format(line_id))
                    trace('------- start print -------')
                    for line in log.read(201, log.cur_line_index - 101):
                        print(line)
                    trace('------- end print -------')
                    break

                else:
                    trace("No '{0}' occurrencies has been found.".format(
                        line_id))
예제 #6
0
class Client:
    def __init__(self):
        self.socket = zhelper.newSocket(zmq.REQ, TRACKER_IP, TRACKER_PORTS)
        self.downloader = Downloader()
        self.uploader = Uploader()
        self.fileExplorer = FileExplorer()

    def listFiles(self, token):
        files = self.fileExplorer.explore(self.socket, token)
        print("listFiles: files are")
        print("\n".join(files))
        return files

    def downloadFile(self, token, fileName, savePathDir="."):
        downloadedFile = self.downloader.download(self.socket, token, fileName)
        if (not downloadedFile):
            return False
        utils.writeVideo(downloadedFile, f"{savePathDir}/{fileName}_rec.mp4")
        return downloadedFile

    def uploadLocalFile(self, token, filePath):
        return self.uploader.upload(self.socket, token, filePath)
예제 #7
0
 def setUp(self):
     self.fe = FileExplorer(open, DATA_01_LOG)
예제 #8
0
class TestFileExplorer(unittest.TestCase):
    def setUp(self):
        self.fe = FileExplorer(open, DATA_01_LOG)

    def tearDown(self):
        self.fe.close()

    def test_cur_line_index_iterates_from_0(self):
        ''' cur_line_index итерируется правильно '''
        index = 0
        for l in self.fe:
            index += 1
            self.assertEqual(self.fe.cur_line_index, index)

    def test_read_1_line_return_one_line(self):
        ''' чтение одной строки'''
        line = self.fe.read()
        self.assertEqual(
            line, '20:10:29.085040 185130259 dqhl gzytdvpprvflrivlle h    i')
        self.assertEqual(self.fe.cur_line_index, 1, '')

    def test_read_n_lines(self):
        ''' read возвращает указанное количество строк. '''
        lines_to_read = 5
        lines = self.fe.read(lines_to_read)
        self.assertEqual(
            len(lines),
            lines_to_read,
        )
        self.assertEqual(
            lines[0],
            '20:10:29.085040 185130259 dqhl gzytdvpprvflrivlle h    i',
            'Первая прочитанная строка не равна строке из файла')
        self.assertEqual(
            lines[lines_to_read - 1],
            '20:10:29.085040 258262132 vzkpk ivvdtpsxlcffehbibvgmjkvq',
            '{0} строка не равна строке из файла'.format(lines_to_read))
        self.assertEqual(self.fe.cur_line_index, lines_to_read, '')

    def test_seek_line_return_correct_line(self):
        ''' seek - должен переходить к указанной строке в файле '''
        line_to_seek = 21
        self.fe.seek(line_to_seek)
        self.assertEqual(self.fe.cur_line_index, 21,
                         'cur_line_index неправильный')

    def test_seek_return_to_previous_line(self):
        ''' возвращение на уже прочитанную линию '''
        lines_to_read = 5
        seak_line = 2
        self.fe.read(lines_to_read)
        self.fe.seek(seak_line)
        self.assertEqual(self.fe.cur_line_index, seak_line,
                         'курсор не встал на линию {0}'.format(seak_line))
        self.assertEqual(
            self.fe.read(),
            '20:10:29.085040 987719878  p tiwj   puca yhl kt gqqeihc',
            'читается неправильная строка')

    def test_read_n_lines_from_start_pos(self):
        ''' чтение указанного количества строк, начиная с указанной позиции '''
        start_pos = 12
        lines_to_read = 5
        lines = self.fe.read(lines_to_read, start_pos)
        self.assertEqual(len(lines), lines_to_read, 'прочитаны не все строки')
        self.assertEqual(
            lines[0],
            '20:10:29.086017 392548458 hcwxu rr doiu mofiansylomvsfi',
            'Первая прочитанная строка не равна строке из файла')
        self.assertEqual(
            lines[lines_to_read - 1],
            '20:10:29.086017 858173529 r evgcpe cepkzed daz fddjdecmu',
            '{0} строка не равна строке из файла'.format(start_pos +
                                                         lines_to_read))
        self.assertEqual(self.fe.cur_line_index, start_pos + lines_to_read,
                         'после чтения курсор не на той позиции')

    def test_search_string_exsistint_string_return_True(self):
        ''' поиск существующеего текста в логе '''
        text_to_search = '291894706'
        self.fe = FileExplorer(open, DATA_43_LOG)
        is_found = self.fe.search_string(text_to_search)
        self.assertTrue(is_found, 'существующий в логе текст не найден')
        self.assertEqual(self.fe.cur_line_index, 35419,
                         'неправильный индекс у найденной строки')

    def test_read_till_end_of_file(self):
        ''' чтение до конца файла '''
        self.fe.seek(999)
        last_line = self.fe.read()
        self.assertEqual(
            last_line,
            '20:10:29.149529 293517476 bmsmbnbbmb pjxvia ghg arvirots',
            'Последняя линия прочитана неправильно')
        self.assertEqual(self.fe.cur_line_index, 1000,
                         'индекс последней строки (EOF) не верен')
        self.assertEqual(
            self.fe.read(), '',
            'При чтении в конце файла не возвращается пустой символ')
        self.assertEqual(self.fe.EOF, True,
                         'Не проставлен флаг окончания файла')
        self.assertEqual(
            self.fe.read(), '',
            'При чтении в конце файла не возвращается пустой символ')
        self.assertEqual(
            self.fe.cur_line_index, 1000,
            'после чтение в конце файла индекс последней строки изменился. Этого быть не должно'
        )

    def test_read_n_lines_more_than_end_of_file(self):
        ''' чтение строк больше чем есть в файле '''
        end_lines = self.fe.read(50, 990)
        self.assertEqual(len(end_lines), 10,
                         'Прочитано неверное количество строк')
        self.assertEqual(
            end_lines[-1],
            '20:10:29.149529 293517476 bmsmbnbbmb pjxvia ghg arvirots',
            'Последняя строка неверная')

    def test_read_till_x_return_to_y_and_then_read_till_z_more_than_x(self):
        ''' Прочитать до Х, затем вернуться до y затем читать до Z > X'''
        x, y, z = 5, 2, 7
        self.fe.read(x)
        self.fe.seek(y)
        self.fe.read(z)
        self.assertEqual(self.fe.cur_line_index, 9)
예제 #9
0
 def __init__(self):
     self.socket = zhelper.newSocket(zmq.REQ, TRACKER_IP, TRACKER_PORTS)
     self.downloader = Downloader()
     self.uploader = Uploader()
     self.fileExplorer = FileExplorer()
예제 #10
0
    def setupUi(self, DiskStartWidget):
        DiskStartWidget.setObjectName("DiskStartWidget")
        DiskStartWidget.resize(1280, 1024)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            DiskStartWidget.sizePolicy().hasHeightForWidth())
        DiskStartWidget.setSizePolicy(sizePolicy)
        DiskStartWidget.setMinimumSize(QtCore.QSize(1280, 1024))
        DiskStartWidget.setMaximumSize(QtCore.QSize(1280, 1024))
        self.verticalLayoutWidget = QtWidgets.QWidget(DiskStartWidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1281, 1021))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.backButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.backButton.sizePolicy().hasHeightForWidth())
        self.backButton.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.backButton.setFont(font)
        self.backButton.setCheckable(False)
        self.backButton.setChecked(False)
        self.backButton.setObjectName("backButton")
        self.horizontalLayout_3.addWidget(self.backButton)
        spacerItem = QtWidgets.QSpacerItem(40, 20,
                                           QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.widget = FileExplorer(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.widget.sizePolicy().hasHeightForWidth())
        self.widget.setSizePolicy(sizePolicy)
        self.widget.setObjectName("widget")
        self.horizontalLayout_2.addWidget(self.widget)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem1 = QtWidgets.QSpacerItem(40, 20,
                                            QtWidgets.QSizePolicy.Expanding,
                                            QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.SaveAsPresetButton = QtWidgets.QPushButton(
            self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.SaveAsPresetButton.sizePolicy().hasHeightForWidth())
        self.SaveAsPresetButton.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.SaveAsPresetButton.setFont(font)
        self.SaveAsPresetButton.setObjectName("SaveAsPresetButton")
        self.horizontalLayout.addWidget(self.SaveAsPresetButton)
        self.NextButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.NextButton.sizePolicy().hasHeightForWidth())
        self.NextButton.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.NextButton.setFont(font)
        self.NextButton.setObjectName("NextButton")
        self.horizontalLayout.addWidget(self.NextButton)
        self.verticalLayout.addLayout(self.horizontalLayout)

        self.retranslateUi(DiskStartWidget)
        QtCore.QMetaObject.connectSlotsByName(DiskStartWidget)