flask_訪問遠端服務器本地日誌緩存

flask_訪問遠端服務器本地日誌緩存


在這裏插入圖片描述
在這裏插入圖片描述
首先確認按鈕,生成下載的url

# 下載的錯誤日誌的緩存文件夾路徑
cache_filedir = os.path.abspath('.') + '/static/bi_logs/'
# 判斷文件夾是否存在,不存在,就創建
if not os.path.isdir(cache_filedir):
	os.mkdir(cache_filedir)
# 緩存文件夾中所有的文件名集合
cache_filedir_set = set(os.listdir(cache_filedir))
# 需要下載的文件名————匹配存儲的文件名規則
filename = gamename + gamelang + '_' + '_'.join([params_dic[key] for key in params_dic]) + '.log'
# 如果在,直接返回本地路徑,不在,請求遠端
if filename in cache_filedir_set:
	url = '/static/bi_logs/' + filename
else:
    url = return_url(ip, 'admin', 'downloadUserClientLogs', params_dic, session.get('token'))
return url
# 生成的url用於填充下載按鈕(a標籤的href)

在生成的下載按鈕後,執行下載任務(如果,是遠程訪問的url)

 if request.method == 'POST':
     visit_path = {
         'd': '',
         'event': '',
         'r': '',
         'u': '',
         'token': '',
     }
     cache_log_url = request.form.get('cache_log_url')
     gamename = request.form.get('gamename')
     gamelang = request.form.get('gamelang')
     for key in visit_path:
         visit_path[key] = request.form.get(key)
     visit_path_url = cache_log_url + '?' + '&'.join(
         ['{}={}'.format(key, value) for key, value in visit_path.items()]) + '&admin=1'
     filename_element_list = [name for index, name in enumerate([value for key, value in visit_path.items()])
                              if index <= 3]

     filename = gamename + gamelang + '_' + '_'.join(filename_element_list) + '.log'
     step = os.path.sep
     bash_path = os.path.abspath('.') + '{}static{}bi_logs{}'.format(step, step, step)
     filename_path = bash_path + filename

     import requests
     # closing 模塊用於訪問遠程鏈接,後臺拿到結果,無需展示
     from contextlib import closing
     with closing(requests.get(visit_path_url, stream=True)) as response:
         with open(filename_path, 'wb') as file:
             for data in response.iter_content(128):
                 file.write(data)

     return 'true'
 else:
     return ''

js代碼

<script>
	// ajax 訪問方法
	function requestByAjax(url, method, data, callback) {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        callback(xhr.responseText)
                    }
                }
            };
            xhr.open(method, url, true);
            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            if (method === 'post' && data != null) {
                xhr.send(data)
            } else {
                xhr.send()
            }
        }

		// 點擊確定按鈕
        document.getElementById('buttonsubmit').onclick = function () {
            gameuserid = document.getElementById('gameuserid').value;
            events = $('select[name="events"]').val();
            searchtime = document.getElementById('searchtime').value;
            gamename = $('select[name="gamename"]').val();
            gamelang = $('select[name="gamelang"]').val();
            // 獲取下載按鈕
            download = document.getElementById('download');

            data = 'gameuserid=' + gameuserid + '&' + 'event=' + events + '&' + 'searchtime=' + searchtime + '&' + 'gamename=' + gamename + '&' + 'gamelang=' + gamelang;var r = '1';

            {#判斷有沒有選擇日期#}
            if (!searchtime){
                alert('還沒有選擇查詢時間!!!');
            } else{
                {#進行文件url的判斷#}
                requestByAjax('', 'post', data, function (log_path) {
                    str_path = "location='" + log_path + "'";
                    download.setAttribute('onclick', str_path + '; ' + 'judge_change()');
                    download.style.display = 'block';
                    });
            }
        };

		// 下載按鈕方法
        function judge_change() {
            download = document.getElementById('download');
            str_path = download.getAttribute('onclick');
            start_index = str_path.indexOf("=") + 1;
            end_index = str_path.indexOf(';');
            is_cache_log_href = str_path.substring(start_index + 1, end_index);

            gamename = $('select[name="gamename"]').val();
            gamelang = $('select[name="gamelang"]').val();

            if (is_cache_log_href.indexOf('/static/bi_logs') === -1)  {
                data = 'cache_log_url=' + is_cache_log_href.split('?', 1) + '&' + is_cache_log_href.split('?').slice(1).join('?') + '&' + 'gamename=' + gamename + '&' + 'gamelang=' + gamelang;
                requestByAjax('cache_log/', 'post', data, function (isTrue) {
                    if (!isTrue) alert('日誌服務器出錯了,請稍後再試...');
                })
            }
        }
</script>

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章