mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-27 11:10:31 +08:00
feat: add retry when requesting ocr service
This commit is contained in:
@@ -45,7 +45,7 @@ func (s *veDEMOCRService) getOCRResult(imageBuf []byte) ([]OCRResult, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("create form file error: %v", err)
|
return nil, fmt.Errorf("create form file error: %v", err)
|
||||||
}
|
}
|
||||||
_, err = formWriter.Write(imageBuf)
|
size, err := formWriter.Write(imageBuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("write form error: %v", err)
|
return nil, fmt.Errorf("write form error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -55,8 +55,9 @@ func (s *veDEMOCRService) getOCRResult(imageBuf []byte) ([]OCRResult, error) {
|
|||||||
return nil, fmt.Errorf("close body writer error: %v", err)
|
return nil, fmt.Errorf("close body writer error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if env.VEDEM_OCR_URL == "" {
|
if env.VEDEM_OCR_URL == "" || env.VEDEM_OCR_AK == "" || env.VEDEM_OCR_SK == "" {
|
||||||
log.Error().Msg("VEDEM_OCR_URL env missed for OCR service")
|
log.Error().Msg(
|
||||||
|
"missed env missed for veDEM OCR service: VEDEM_OCR_URL/VEDEM_OCR_AK/VEDEM_OCR_SK")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,14 +70,25 @@ func (s *veDEMOCRService) getOCRResult(imageBuf []byte) ([]OCRResult, error) {
|
|||||||
|
|
||||||
req.Header.Add("Agw-Auth", token)
|
req.Header.Add("Agw-Auth", token)
|
||||||
req.Header.Add("Content-Type", bodyWriter.FormDataContentType())
|
req.Header.Add("Content-Type", bodyWriter.FormDataContentType())
|
||||||
resp, err := client.Do(req)
|
|
||||||
if err != nil {
|
var resp *http.Response
|
||||||
var logID string
|
// retry 3 times
|
||||||
if resp != nil {
|
for i := 1; i <= 3; i++ {
|
||||||
logID = getLogID(resp.Header)
|
resp, err = client.Do(req)
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("http reqeust veDEM OCR server error: %v, logID: %s", err, logID)
|
logID := getLogID(resp.Header)
|
||||||
|
log.Error().Err(err).
|
||||||
|
Str("logID", logID).
|
||||||
|
Int("imageBufSize", size).
|
||||||
|
Msgf("request OCR service failed, retry %d", i)
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
}
|
}
|
||||||
|
if resp == nil {
|
||||||
|
return nil, fmt.Errorf("veDEM OCR service is not available")
|
||||||
|
}
|
||||||
|
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
results, err := ioutil.ReadAll(resp.Body)
|
results, err := ioutil.ReadAll(resp.Body)
|
||||||
|
|||||||
@@ -243,7 +243,8 @@ def sort_dict_by_custom_order(raw_dict: Dict, custom_order: List):
|
|||||||
|
|
||||||
|
|
||||||
class ExtendJSONEncoder(json.JSONEncoder):
|
class ExtendJSONEncoder(json.JSONEncoder):
|
||||||
"""especially used to safely dump json data with python object, such as MultipartEncoder"""
|
"""especially used to safely dump json data with python object,
|
||||||
|
such as MultipartEncoder"""
|
||||||
|
|
||||||
def default(self, obj):
|
def default(self, obj):
|
||||||
try:
|
try:
|
||||||
@@ -275,7 +276,8 @@ def is_support_multiprocessing() -> bool:
|
|||||||
Queue()
|
Queue()
|
||||||
return True
|
return True
|
||||||
except (ImportError, OSError):
|
except (ImportError, OSError):
|
||||||
# system that does not support semaphores(dependency of multiprocessing), like Android termux
|
# system that does not support semaphores
|
||||||
|
# (dependency of multiprocessing), like Android termux
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@@ -320,7 +322,10 @@ def gen_cartesian_product(*args: List[Dict]) -> List[Dict]:
|
|||||||
return product_list
|
return product_list
|
||||||
|
|
||||||
|
|
||||||
LOGGER_FORMAT = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <level>{message}</level>"
|
LOGGER_FORMAT = (
|
||||||
|
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green>"
|
||||||
|
+ " | <level>{level}</level> | <level>{message}</level>"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def init_logger(level: str):
|
def init_logger(level: str):
|
||||||
|
|||||||
Reference in New Issue
Block a user