업무를 하면서 자산마다 접근 되는지 확인을 하기 위한 작업을 있어 이를 자동화 하는 코드를 만들었습니다.
구조
그림으로 그려본 도식화입니다.
- 엑셀 파일에서 URL과 URL 서비스 이름을 읽어옵니다.
- 읽어온 데이터를 URL 서비스를 딕셔너리의 키, URL을 딕셔너리의 값으로 저장합니다.
- URL Request & Reply
- 접근이 불가능 한 경우(DNS 없거나, 타임아웃등) 응답을 error로 만들고 에러 상세 로그를 에러 파일에 저장합니다.
- 결과를 보여줍니다.
엑셀 데이터
사용할 데이터 양식입니다. 1행은 헤더 2열은 서비스명, 3열은 URL입니다.
기능 추가
응답 결과가 존재 시(200,304,403등) O, 에러 발생 시 X를 추가하여 엑셀로 저장하는 기능 추가
코드
- pip install openpyxl, requests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import requests
import urllib3
import logging
import openpyxl
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #SSL 에러 무시
logging.basicConfig(filename='error.log', level=logging.ERROR) #SSL 에러 로그로 저장
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL:@SECLEVEL=1' #SSL 에러 무시
class colors:
BLACK = '\033[30m'
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
WHITE = '\033[37m'
UNDERLINE = '\033[4m'
RESET = '\033[0m'
def URL_CHECK(URL_list): #Request 보내는 모듈
wb = openpyxl.Workbook() # 새 워크북 생성
ws = wb.active # 현재 활성화된 시트 가져오기
ws.append(['Service Name', 'URL', 'Status']) # 헤더 추가
for URL in URL_list:
error = "error"
if URL == None:
continue
try:
response = requests.get(URL_list[URL], verify=False)
ws.append([URL, URL_list[URL], 'O']) # 성공 시 O 추가
print(f"{URL:<20} {response.status_code:^5} {URL_list[URL]:<30}")
except requests.exceptions.ConnectionError as e: # 응답 에러 발생 시 error 출력 및 에러 상세 로그
ws.append([URL, URL_list[URL], 'X']) # 실패 시 X 추가
print(f"{colors.YELLOW}{URL:<20} {error:^5} {URL_list[URL]:<30}{colors.RESET}")
logging.error(f"{URL:<5} ERROR : {e}")
continue
wb.save('health_check_result.xlsx') # 결과 엑셀 파일 저장
return
def EXCEL_READ(excel_name): # 엑셀 파일을 읽어옴
wb = openpyxl.load_workbook(excel_name)
return wb
def EXCEL_Sheet(wb,Sheet_name): #엑셀 시트를 읽어옴
Sheet_name = wb[Sheet_name]
return Sheet_name
def EXCEL_DATA_LOAD(Sheet_name, Column_Service, Column_URL): # 엑셀 데이터를 읽어옴
for row in Sheet_name.iter_rows(min_row=2, values_only=True): #minrow 2번째 행부터 데이터 읽기, Cell 값만 읽기
URL_DATA[row[Column_Service-1]] = row[Column_URL-1] #B열의 딕셔너리 키로, C열을 딕셔너리 값으로 가져오기
return URL_DATA
if __name__ == '__main__':
excel_name = "url.xlsx" #엑셀이름
Sheet_name = "Sheet1" #엑셀시트이름
Column_Service = 2 #엑셀 읽어올 딕셔너리 키 열
Column_URL = 3 #엑셀 읽어올 딕셔너리 값 열
URL_DATA = {} # 엑셀 데이터 저장할 딕셔너리
wb = EXCEL_READ(excel_name)
Sheet = EXCEL_Sheet(wb,Sheet_name)
URL_DATA = EXCEL_DATA_LOAD(Sheet,Column_Service,Column_URL)
URL_CHECK(URL_DATA)
결과
잘 출력되는 것을 볼 수 있습니다.
엑셀로 저장되는 것을 볼 수 있습니다.
https://glasses96.com 에러 상세 로그 파일도 확인할 수 있습니다.