Skip to content

Commit 7c10602

Browse files
authored
Merge pull request #101 from DomainTools/id-1388-find-averages
ID-1388 Python Wrapper: Find averages
2 parents f7505ad + 4282625 commit 7c10602

File tree

2 files changed

+137
-3
lines changed

2 files changed

+137
-3
lines changed

domaintools/utils.py

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ def get_domain_age(create_date):
1010
1111
Returns: Number of days between now and the create_date.
1212
"""
13-
time_diff = datetime.now() - dateparser.parse(create_date)
13+
time_diff = datetime.now() - dateparser.parse(create_date, date_formats=['%Y-%m-%d', '%Y%m%d'])
14+
1415
return time_diff.days
1516

1617

@@ -27,4 +28,48 @@ def get_threat_component(components, threat_type):
2728
if component.get("name") == threat_type:
2829
return component
2930
else:
30-
return None
31+
return None
32+
33+
34+
def get_average_risk_score(domains):
35+
"""
36+
Gets average domain risk score for Investigate and Detect result sets
37+
Args:
38+
domains: Investigate or Detect result set
39+
40+
Returns: average risk score
41+
"""
42+
count = 0
43+
total = 0
44+
for d in domains:
45+
# investigate result set
46+
if "risk_score" in d.get("domain_risk", {}):
47+
count += 1
48+
total += d.get("domain_risk").get("risk_score")
49+
# detect result set
50+
elif d.get("risk_score"):
51+
count += 1
52+
total += d.get("risk_score")
53+
54+
return total // count if count else None
55+
56+
57+
def get_average_age(domains):
58+
"""
59+
Gets average domain age for Investigate and Detect result sets
60+
Args:
61+
domains: Investigate or Detect result set
62+
63+
Returns: average age
64+
"""
65+
count = 0
66+
total = 0
67+
for d in domains:
68+
if isinstance(d.get("create_date"), dict) and d.get("create_date").get("value"):
69+
count += 1
70+
total += get_domain_age(d.get("create_date").get("value"))
71+
elif isinstance(d.get("create_date"), int):
72+
count += 1
73+
total += get_domain_age(str(d.get("create_date")))
74+
75+
return total // count if count else None

tests/test_utils.py

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,93 @@ def test_get_threat_component():
1313
{"name": "threat_profile_spam", "risk_score": 73, "threats": ["spam"]}
1414
]
1515
result = utils.get_threat_component(threat_components, "threat_profile_malware")
16-
assert result.get("risk_score") == 31
16+
assert result.get("risk_score") == 31
17+
18+
19+
def test_investigate_average_risk_score():
20+
domains = [
21+
{"domain_risk": {"risk_score": 25}},
22+
{"domain_risk": {"risk_score": 27}}
23+
]
24+
result = utils.get_average_risk_score(domains)
25+
assert result == 26
26+
27+
domains = [
28+
{"domain_risk": {"risk_score": 25}},
29+
{}
30+
]
31+
result = utils.get_average_risk_score(domains)
32+
assert result == 25
33+
34+
domains = []
35+
result = utils.get_average_risk_score(domains)
36+
assert result == None
37+
38+
def test_detect_average_risk_score():
39+
domains = [
40+
{"risk_score": 25},
41+
{"risk_score": 27}
42+
]
43+
result = utils.get_average_risk_score(domains)
44+
assert result == 26
45+
46+
domains = [
47+
{"risk_score": 25},
48+
{"risk_score": None}
49+
]
50+
result = utils.get_average_risk_score(domains)
51+
assert result == 25
52+
53+
domains = []
54+
result = utils.get_average_risk_score(domains)
55+
assert result == None
56+
57+
def test_investigate_average_age():
58+
two_days_ago = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
59+
five_days_ago = (datetime.now() - timedelta(days=5)).strftime("%Y-%m-%d")
60+
61+
domains = [
62+
{"create_date": {"value": two_days_ago}},
63+
{"create_date": {"value": five_days_ago}}
64+
]
65+
result = utils.get_average_age(domains)
66+
assert result == 3
67+
68+
domains = [
69+
{"create_date": {"value": two_days_ago}},
70+
{}
71+
]
72+
result = utils.get_average_age(domains)
73+
assert result == 2
74+
75+
domains = [
76+
{"create_date": {"value": two_days_ago}},
77+
{"create_date": {"value": ""}}
78+
]
79+
result = utils.get_average_age(domains)
80+
assert result == 2
81+
82+
domains = []
83+
result = utils.get_average_age(domains)
84+
assert result == None
85+
86+
def test_detect_average_age():
87+
two_days_ago = int((datetime.now() - timedelta(days=2)).strftime("%Y%m%d"))
88+
five_days_ago = int((datetime.now() - timedelta(days=5)).strftime("%Y%m%d"))
89+
domains = [
90+
{"create_date": two_days_ago},
91+
{"create_date": five_days_ago}
92+
]
93+
result = utils.get_average_age(domains)
94+
assert result == 3
95+
96+
domains = [
97+
{"create_date": two_days_ago},
98+
{"create_date": None}
99+
]
100+
result = utils.get_average_age(domains)
101+
assert result == 2
102+
103+
domains = []
104+
result = utils.get_average_risk_score(domains)
105+
assert result == None

0 commit comments

Comments
 (0)