HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
error-mask-info.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 
3 """
4 HCE project, Python bindings, Distributed Tasks Manager application.
5 error-mask-info.py - cli tool to decode error mask info and output to stdout.
6 
7 @package: dc
8 @file error-mask-info.py
9 @author Alexander Vybornyh <alexander.hce.cluster@gmail.com>
10 @link: http://hierarchical-cluster-engine.com/
11 @copyright: Copyright &copy; 2013-2016 IOIX Ukraine
12 @license: http://hierarchical-cluster-engine.com/license/
13 @since: 0.1
14 """
15 
16 import ppath
17 from ppath import sys
18 
19 import json
20 import logging
21 import app.Utils as Utils
22 import app.Consts as CONSTS
23 
24 logging.basicConfig(filename="../log/error-mask-info.log", filemode="w")
25 logger = logging.getLogger(CONSTS.LOGGER_NAME)
26 logger.setLevel("DEBUG")
27 
28 
29 MSG_ERROR_EXIT_STATUS = "Exit failure. "
30 
31 MSG_DEBUG_INPUT_ERROR_MASK = "Input error mask: "
32 MSG_DEBUG_CONVERTED_MASKS = "Converted masks: "
33 
34 
35 STATUS_SUCCESS = 0
36 STATUS_FAILURE = 1
37 
38 defined_masks = {
39 # CrawlerTask section
40 "CRAWLER-TASK-ERROR-BAD-URL" : CONSTS.ERROR_BAD_URL,
41 "CRAWLER-TASK-ERROR-REQUEST-TIMEOUT" : CONSTS.ERROR_REQUEST_TIMEOUT,
42 "CRAWLER-TASK-ERROR-HTTP-ERROR" : CONSTS.ERROR_HTTP_ERROR,
43 "CRAWLER-TASK-ERROR-EMPTY-RESPONSE" : CONSTS.ERROR_EMPTY_RESPONSE,
44 "CRAWLER-TASK-ERROR-WRONG-MIME" : CONSTS.ERROR_WRONG_MIME,
45 "CRAWLER-TASK-ERROR-CONNECTION-ERROR" : CONSTS.ERROR_CONNECTION_ERROR,
46 "CRAWLER-TASK-ERROR-PAGE-CONVERT-ERROR" : CONSTS.ERROR_PAGE_CONVERT_ERROR,
47 "CRAWLER-TASK-ERROR-ERROR-MACRO" : CONSTS.ERROR_MACRO,
48 "CRAWLER-TASK-ERROR-RESPONSE-SIZE-ERROR" : CONSTS.ERROR_RESPONSE_SIZE_ERROR,
49 "CRAWLER-TASK-ERROR-AUTH-ERROR" : CONSTS.ERROR_AUTH_ERROR,
50 "CRAWLER-TASK-ERROR-WRITE-FILE-ERROR" : CONSTS.ERROR_WRITE_FILE_ERROR,
51 "CRAWLER-TASK-ERROR-ROBOTS-NOT-ALLOW" : CONSTS.ERROR_ROBOTS_NOT_ALLOW,
52 "CRAWLER-TASK-ERROR-HTML-PARSE-ERROR" : CONSTS.ERROR_HTML_PARSE_ERROR,
53 "CRAWLER-TASK-ERROR-BAD-ENCODING" : CONSTS.ERROR_BAD_ENCODING,
54 "CRAWLER-TASK-ERROR-SITE-MAX-ERRORS" : CONSTS.ERROR_SITE_MAX_ERRORS,
55 "CRAWLER-TASK-ERROR-EMPTY-RESPONSE" : CONSTS.ERROR_EMPTY_RESPONSE,
56 "CRAWLER-TASK-ERROR_CRAWLER_FILTERS_BREAK" : CONSTS.ERROR_CRAWLER_FILTERS_BREAK,
57 "CRAWLER-TASK-ERROR-MAX-ALLOW-HTTP-REDIRECTS" : CONSTS.ERROR_MAX_ALLOW_HTTP_REDIRECTS,
58 "CRAWLER-TASK-ERROR-MAX-ALLOW-HTML-REDIRECTS" : CONSTS.ERROR_MAX_ALLOW_HTML_REDIRECTS,
59 "CRAWLER-TASK-ERROR-GENERAL-CRAWLER" : CONSTS.ERROR_GENERAL_CRAWLER,
60 "CRAWLER-TASK-ERROR-DTD-INVALID" : CONSTS.ERROR_DTD_INVALID,
61 "CRAWLER-TASK-ERROR-MACRO-DESERIALIZATION" : CONSTS.ERROR_MACRO_DESERIALIZATION,
62 "CRAWLER-TASK-ERROR-FETCH-AMBIGUOUS-REQUEST" : CONSTS.ERROR_FETCH_AMBIGUOUS_REQUEST,
63 "CRAWLER-TASK-ERROR-FETCH-CONNECTION-ERROR" : CONSTS.ERROR_FETCH_CONNECTION_ERROR,
64 "CRAWLER-TASK-ERROR-FETCH-HTTP-ERROR" : CONSTS.ERROR_FETCH_HTTP_ERROR,
65 "CRAWLER-TASK-ERROR-FETCH-INVALID-URL" : CONSTS.ERROR_FETCH_INVALID_URL,
66 "CRAWLER-TASK-ERROR-FETCH-TOO-MANY-REDIRECTS" : CONSTS.ERROR_FETCH_TOO_MANY_REDIRECTS,
67 "CRAWLER-TASK-ERROR-FETCH-CONNECTION-TIMEOUT" : CONSTS.ERROR_FETCH_CONNECTION_TIMEOUT,
68 "CRAWLER-TASK-ERROR-FETCH-READ-TIMEOUT" : CONSTS.ERROR_FETCH_READ_TIMEOUT,
69 "CRAWLER-TASK-ERROR-FETCH-TIMEOUT" : CONSTS.ERROR_FETCH_TIMEOUT,
70 "CRAWLER-TASK-FETCHER-INTERNAL-ERROR" : CONSTS.ERROR_FETCHER_INTERNAL,
71 
72 # ProcessorTask section
73 "PROCESSOR-TASK-ERROR_MASK_SITE_MAX_RESOURCES_NUMBER" : CONSTS.ERROR_MASK_SITE_MAX_RESOURCES_NUMBER,
74 "PROCESSOR-TASK-ERROR_DATABASE_ERROR": CONSTS.ERROR_DATABASE_ERROR,
75 "PROCESSOR-TASK-ERROR_MASK_SITE_MAX_RESOURCES_SIZE" : CONSTS.ERROR_MASK_SITE_MAX_RESOURCES_SIZE,
76 "PROCESSOR-TASK-ERROR_MASK_SITE_UNSUPPORTED_CONTENT_TYPE" : CONSTS.ERROR_MASK_SITE_UNSUPPORTED_CONTENT_TYPE,
77 "PROCESSOR-TASK-ERROR_MASK_URL_ENCODING_ERROR" : CONSTS.ERROR_MASK_URL_ENCODING_ERROR,
78 "PROCESSOR-TASK-ERROR_MASK_SCRAPER_ERROR" : CONSTS.ERROR_MASK_SCRAPER_ERROR,
79 "PROCESSOR-TASK-ERROR_MASK_MISSED_RAW_CONTENT_ON_DISK" : CONSTS.ERROR_MASK_MISSED_RAW_CONTENT_ON_DISK,
80 "PROCESSOR-TASK-ERROR_RE_ERROR" : CONSTS.ERROR_RE_ERROR,
81 "PROCESSOR-TASK-ERROR_MANDATORY_TEMPLATE": CONSTS.ERROR_MANDATORY_TEMPLATE,
82 "PROCESSOR-TASK-ERROR_PROCESSOR_FILTERS_BREAK" : CONSTS.ERROR_PROCESSOR_FILTERS_BREAK,
83 "PROCESSOR-TASK-ERROR_MASK_SITE_STATE" : CONSTS.ERROR_MASK_SITE_STATE,
84 "PROCESSOR-TASK-ERROR_MAX_ITEMS" : CONSTS.ERROR_MAX_ITEMS,
85 "PROCESSOR-TASK-ERROR_MAX_URLS_FROM_PAGE" : CONSTS.ERROR_MAX_URLS_FROM_PAGE,
86 "PROCESSOR-TASK-ERROR_TEMPLATE_SOURCE" : CONSTS.ERROR_TEMPLATE_SOURCE,
87 
88 # 2 - Crawler errors diapason
89 "CRAWLER-TASK-ERROR-RSS-EMPTY": CONSTS.ERROR_RSS_EMPTY,
90 "CRAWLER-TASK-ERROR-URLS-SCHEMA-EXTERNAL": CONSTS.ERROR_URLS_SCHEMA_EXTERNAL,
91 "CRAWLER-TASK-ERROR-NOT-EXIST-ANY-VALID-PROXY": CONSTS.ERROR_NOT_EXIST_ANY_VALID_PROXY,
92 "CRAWLER-TASK-ERROR-FETCH-FORBIDDEN": CONSTS.ERROR_FETCH_FORBIDDEN,
93 "CRAWLER-TASK-ERROR-NO-TIME-WINDOW": CONSTS.ERROR_NO_TIME_WINDOW,
94 "ERROR_CRAWLER_FATAL_INITIALIZATION_PROJECT_ERROR": CONSTS.ERROR_CRAWLER_FATAL_INITIALIZATION_PROJECT_ERROR,
95 "ERROR_PROCESSOR_BATCH_ITEM_PROCESS": CONSTS.ERROR_PROCESSOR_BATCH_ITEM_PROCESS,
96 "ERROR_MAX_EXECUTION_TIME": CONSTS.ERROR_MAX_EXECUTION_TIME
97 }
98 
99 
101  error_mask = None
102  if len(sys.argv) == 2:
103  try:
104  error_mask = int(sys.argv[1])
105  except:
106  print "error mask must be integer"
107  sys.exit(2)
108  else:
109  print "Usage: ./error-mask-info.py <error mask>"
110  sys.exit(2)
111  logger.debug(MSG_DEBUG_INPUT_ERROR_MASK + '\n' + str(error_mask))
112  return error_mask
113 
114 
115 def convertMask(error_mask):
116  founded = False
117  masks = {"errors":[]}
118  logger.debug("defined_masks: %s", str(defined_masks))
119  logger.debug("error_mask: %s", str(type(error_mask)))
120  for key in defined_masks:
121  if defined_masks[key] & error_mask:
122  masks["errors"].append(key)
123  founded = True
124  if founded:
125  logger.debug(MSG_DEBUG_CONVERTED_MASKS + '\n' + str(masks))
126  else:
127  print "Mask " + str(error_mask) + " not defined both CrawlerTask or ProcessorTask"
128  masks = {}
129  return json.dumps(masks)
130 
131 
132 
133 
134 if __name__ == "__main__":
135  try:
136  exit_status = STATUS_SUCCESS
137  error_mask = getErrorMask()
138  masks = convertMask(error_mask)
139  print masks
140  except Exception, err:
141  tbi = Utils.getTracebackInfo()
142  logger.error(MSG_ERROR_EXIT_STATUS + err.message + '\n' + tbi)
143  exit_status = STATUS_FAILURE
144  exit(exit_status)
def convertMask(error_mask)