leadguru-jobs 0.586.0__py3-none-any.whl → 0.587.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {leadguru_jobs-0.586.0.dist-info → leadguru_jobs-0.587.0.dist-info}/METADATA +1 -1
- {leadguru_jobs-0.586.0.dist-info → leadguru_jobs-0.587.0.dist-info}/RECORD +9 -9
- lgt_jobs/jobs/bot_stats_update.py +9 -6
- lgt_jobs/jobs/workspace_connect.py +1 -1
- lgt_jobs/lgt_common/discord_client/discord_client.py +4 -2
- lgt_jobs/lgt_data/analytics.py +3 -3
- lgt_jobs/lgt_data/model.py +8 -6
- {leadguru_jobs-0.586.0.dist-info → leadguru_jobs-0.587.0.dist-info}/WHEEL +0 -0
- {leadguru_jobs-0.586.0.dist-info → leadguru_jobs-0.587.0.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,7 @@ lgt_jobs/assets/images/logo.png,sha256=nt377FGkBalBF9Z9TYQRv9loHolTXwU8_VRYvCXXz
|
|
12
12
|
lgt_jobs/assets/images/mail.png,sha256=eORzQcAMkFr7DjgtABVhJ_zFuXgO7OXv78lLF4b39B0,7168
|
13
13
|
lgt_jobs/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
14
|
lgt_jobs/jobs/analytics.py,sha256=IIsWt4A1qUw3w-S-8W16uKY1FRVWfXXA41_mu4uCNiM,979
|
15
|
-
lgt_jobs/jobs/bot_stats_update.py,sha256=
|
15
|
+
lgt_jobs/jobs/bot_stats_update.py,sha256=yDA6-FqSC5T2jTPaHImSjnuI6OD0pw-BF9VagsfmkXM,7806
|
16
16
|
lgt_jobs/jobs/chat_history.py,sha256=tZ4XyOGdy1k6r4uotxSSKbXjTR_oRK6Ym0YthFYBtl8,6200
|
17
17
|
lgt_jobs/jobs/connect_sources.py,sha256=_eA86KnS3AC6YCI1xk7VCV7lFmPRxta-wUStfdmajQU,4790
|
18
18
|
lgt_jobs/jobs/inbox_leads.py,sha256=OSX-FNx27gWEKNBBc-hyq2odCxXytz7WHtQJajtz274,5670
|
@@ -22,12 +22,12 @@ lgt_jobs/jobs/send_code.py,sha256=dIlLPkG3GgGKIEqGiElyzrtdrnJNTL1Ak2V0xnE-WIQ,82
|
|
22
22
|
lgt_jobs/jobs/send_slack_message.py,sha256=IuRqDGcDrz2EAZzF6nrLXO0aSA4mETB_tGOEbcMhjHE,2562
|
23
23
|
lgt_jobs/jobs/update_slack_profile.py,sha256=0fUHBd2gEBne52sTfxwji2Wu-oYDM5dLGsL-rHq5kwM,2765
|
24
24
|
lgt_jobs/jobs/user_balance_update.py,sha256=HxeEmDdloK9EcoEj1ybYTgxIkB0IQNLnss_kk3rLI1Q,2404
|
25
|
-
lgt_jobs/jobs/workspace_connect.py,sha256=
|
25
|
+
lgt_jobs/jobs/workspace_connect.py,sha256=LSZkkuPuHTqxvaTgqz_Y_kGIkF3Mmn_xwKf2h0uDWVg,7115
|
26
26
|
lgt_jobs/lgt_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
lgt_jobs/lgt_common/helpers.py,sha256=tJNrKJYPa_MBmfRVrpHryoOWe4gnv7xOlmHuTh-bMBw,428
|
28
28
|
lgt_jobs/lgt_common/lgt_logging.py,sha256=Zxr2sPpY-qU_YbL_47OM6dE_JA1ejG_Vr1PNnjF_jwo,576
|
29
29
|
lgt_jobs/lgt_common/discord_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=
|
30
|
+
lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=_zX7yfDi6ShNuA3zhuDvf9TZacJwGPX0Tcu1OIAmj_U,2540
|
31
31
|
lgt_jobs/lgt_common/discord_client/methods.py,sha256=C46Vq9_-dlvs0nEW6ck8QvAmE_nPUfU89MJUhHaPMLk,391
|
32
32
|
lgt_jobs/lgt_common/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
lgt_jobs/lgt_common/enums/slack_errors.py,sha256=nK7uoguq0F8bIHROp73oeszehT7CgS_VU45n9_Gq_WY,172
|
@@ -39,16 +39,16 @@ lgt_jobs/lgt_common/slack_client/methods.py,sha256=ctKF_1UHEmSWaRsoGEgMZicVabV7e
|
|
39
39
|
lgt_jobs/lgt_common/slack_client/slack_client.py,sha256=icHapSOszFYnSofJ-eWl4lUWSOqng6S9XSRFfMx87Rg,13836
|
40
40
|
lgt_jobs/lgt_common/slack_client/web_client.py,sha256=JrkEepL6EhEtX3Psv_sd25bcRB2P23LoGnFHcczQpnc,4778
|
41
41
|
lgt_jobs/lgt_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
|
-
lgt_jobs/lgt_data/analytics.py,sha256=
|
42
|
+
lgt_jobs/lgt_data/analytics.py,sha256=fiN88zcIxs_bRMmXL7ftp4FvBeJ5I7QBPE4tbwKJ39E,21689
|
43
43
|
lgt_jobs/lgt_data/engine.py,sha256=Rsbz-CApAo_TVDssdjBkv8v_fVOZm_Uh1S6W4fnaEWo,7728
|
44
44
|
lgt_jobs/lgt_data/enums.py,sha256=jBH5WGBtDAvFrh4iiPIzlQ-XrImMpuwqstuasG55mJ0,2209
|
45
45
|
lgt_jobs/lgt_data/helpers.py,sha256=NDa-V5EYaJfkGoWsmQSwSe6N_jxNxs8tHRQzW1iST6k,480
|
46
|
-
lgt_jobs/lgt_data/model.py,sha256=
|
46
|
+
lgt_jobs/lgt_data/model.py,sha256=G_x0C7mR__OtM_ps2X5_Rg7iK1ijh4iCYbavsLxdaqA,28652
|
47
47
|
lgt_jobs/lgt_data/mongo_repository.py,sha256=kLE906lfqhHF9gp1qvH_3XKCZGCZnxjLMrBLWBy7doo,46099
|
48
48
|
lgt_jobs/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
lgt_jobs/services/web_client.py,sha256=GLWsJkIC8rv6xLFaLwcMm4EwBlVDu0njORwkZqBJaE4,2086
|
50
50
|
lgt_jobs/templates/new_message.html,sha256=dZl8UmdAOOMq4nidvAgMFroSrTV7Pw0RWt2yLp_2idg,6989
|
51
|
-
leadguru_jobs-0.
|
52
|
-
leadguru_jobs-0.
|
53
|
-
leadguru_jobs-0.
|
54
|
-
leadguru_jobs-0.
|
51
|
+
leadguru_jobs-0.587.0.dist-info/METADATA,sha256=MPIxEW1Inlsqy1YT-kHPIcOxgL2oFYvbtFWYLyYkMHA,1319
|
52
|
+
leadguru_jobs-0.587.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
53
|
+
leadguru_jobs-0.587.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
|
54
|
+
leadguru_jobs-0.587.0.dist-info/RECORD,,
|
@@ -32,6 +32,7 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
32
32
|
bots_rep = DedicatedBotRepository()
|
33
33
|
users_rep = UserMongoRepository()
|
34
34
|
bot = bots_rep.get_one(id=data.bot_id, include_deleted=True)
|
35
|
+
received_messages, filtered_messages = get_bots_aggregated_analytics(bot_ids=[str(bot.id)])
|
35
36
|
|
36
37
|
if bot.source.source_type == SourceType.DISCORD:
|
37
38
|
client = DiscordClient(bot.token)
|
@@ -71,6 +72,8 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
71
72
|
if discord_server.icon:
|
72
73
|
discord_server.icon = (f'https://cdn.discordapp.com/icons/{discord_server.id}/'
|
73
74
|
f'{discord_server.icon}.png')
|
75
|
+
discord_server.messages_received = received_messages.get(discord_server.id)
|
76
|
+
discord_server.messages_filtered = filtered_messages.get(discord_server.id)
|
74
77
|
time.sleep(random.randint(1, 2))
|
75
78
|
|
76
79
|
bot.servers = discord_servers
|
@@ -107,7 +110,6 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
107
110
|
bot.source.source_name = bot_name
|
108
111
|
bot.slack_url = bot.registration_link = team_info['team']['url']
|
109
112
|
bots_rep.add_or_update(bot)
|
110
|
-
received_messages, filtered_messages = get_bots_aggregated_analytics(bot_ids=[bot.id])
|
111
113
|
try:
|
112
114
|
channels_response = client.channels_list()
|
113
115
|
except:
|
@@ -124,23 +126,20 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
124
126
|
connected_channels = 0
|
125
127
|
channels_users = {}
|
126
128
|
active_channels = {}
|
127
|
-
users_count = 0
|
128
129
|
for channel in channels:
|
129
130
|
if channel['is_member']:
|
130
131
|
active_channels[channel['id']] = channel['name']
|
131
132
|
connected_channels += 1
|
132
133
|
num_members = channel.get('num_members', 0)
|
133
134
|
channels_users[channel['id']] = num_members
|
134
|
-
users_count += num_members
|
135
135
|
|
136
136
|
bot.active_channels = active_channels
|
137
|
-
bot.messages_received = received_messages.get(bot.source.source_id, 0)
|
138
|
-
bot.messages_filtered = filtered_messages.get(bot.source.source_id, 0)
|
139
137
|
bot.connected_channels = connected_channels
|
140
138
|
bot.channels = len(channels)
|
141
139
|
bot.channels_users = channels_users
|
142
140
|
if bot.recent_messages is None:
|
143
141
|
bot.recent_messages = []
|
142
|
+
max_users_count = 0
|
144
143
|
if bot.servers:
|
145
144
|
channels = [Channel.from_dic(channel_dict) for channel_dict in channels]
|
146
145
|
for channel in channels:
|
@@ -150,8 +149,12 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
150
149
|
channel.subscribers = channels_users.get(slack_channel.id, 0)
|
151
150
|
else:
|
152
151
|
channel.active = channel.is_member
|
152
|
+
if channel.subscribers > max_users_count:
|
153
|
+
max_users_count = channel.subscribers
|
153
154
|
bot.servers[0].channels = channels
|
154
|
-
bot.servers[0].subscribers =
|
155
|
+
bot.servers[0].subscribers = max_users_count
|
156
|
+
bot.servers[0].messages_received = received_messages.get(bot.source.source_id, 0)
|
157
|
+
bot.servers[0].messages_filtered = filtered_messages.get(bot.source.source_id, 0)
|
155
158
|
|
156
159
|
# save only last 50 messages
|
157
160
|
bot.recent_messages = bot.recent_messages[-50:]
|
@@ -7,7 +7,7 @@ from lgt_jobs.lgt_data.enums import StatusConnection, SourceType
|
|
7
7
|
from lgt_jobs.lgt_data.model import UserWorkspace, SlackUser, DedicatedBotModel
|
8
8
|
from lgt_jobs.lgt_data.mongo_repository import UserMongoRepository, DedicatedBotRepository
|
9
9
|
from lgt_jobs.basejobs import BaseBackgroundJobData, BaseBackgroundJob
|
10
|
-
from .bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
|
10
|
+
from lgt_jobs.jobs.bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
|
11
11
|
from lgt_jobs.runner import BackgroundJobRunner
|
12
12
|
import logging as log
|
13
13
|
from pydantic import BaseModel
|
@@ -29,7 +29,8 @@ class DiscordClient:
|
|
29
29
|
return {}
|
30
30
|
|
31
31
|
def get_servers(self) -> list | dict:
|
32
|
-
response = requests.get(f"{self.base_url}{DiscordMethods.USER_GUILDS.value}",
|
32
|
+
response = requests.get(f"{self.base_url}{DiscordMethods.USER_GUILDS.value}?with_counts=true",
|
33
|
+
headers=self.headers)
|
33
34
|
return self.__response(response).json()
|
34
35
|
|
35
36
|
def get_dms(self) -> list | dict:
|
@@ -43,7 +44,8 @@ class DiscordClient:
|
|
43
44
|
return response.json()
|
44
45
|
|
45
46
|
def get_channels(self, guild_id: str) -> list | dict:
|
46
|
-
response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}",
|
47
|
+
response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}?with_counts=true",
|
48
|
+
headers=self.headers)
|
47
49
|
return self.__response(response).json()
|
48
50
|
|
49
51
|
def get_invite_link(self, channel_id: str) -> Response:
|
lgt_jobs/lgt_data/analytics.py
CHANGED
@@ -8,7 +8,7 @@ from lgt_jobs.lgt_data.mongo_repository import to_object_id
|
|
8
8
|
from pymongo import MongoClient
|
9
9
|
|
10
10
|
client = MongoClient(os.environ.get('MONGO_CONNECTION_STRING', 'mongodb://127.0.0.1:27017/'))
|
11
|
-
db = client.lgt_admin
|
11
|
+
db = client.get_database('lgt_admin')
|
12
12
|
|
13
13
|
|
14
14
|
def _build_date_aggregated_analytics_pipeline(source_id=None, email=None, started_at: datetime = None,
|
@@ -540,12 +540,12 @@ def get_bots_aggregated_analytics(from_date: datetime = None,
|
|
540
540
|
if bot_ids is not None:
|
541
541
|
pipeline.insert(0, {"$match": {"extra_ids": {"$in": bot_ids}}})
|
542
542
|
|
543
|
-
received_messages = list(db
|
543
|
+
received_messages = list(db.get_collection('received_messages').aggregate(pipeline))
|
544
544
|
|
545
545
|
if configs is not None:
|
546
546
|
pipeline.insert(0, {"$match": {"attributes": {"$in": configs}}})
|
547
547
|
|
548
|
-
filtered_messages = list(db
|
548
|
+
filtered_messages = list(db.get_collection('filtered_messages').aggregate(pipeline))
|
549
549
|
received_messages_dic = OrderedDict()
|
550
550
|
filtered_messages_dic = OrderedDict()
|
551
551
|
|
lgt_jobs/lgt_data/model.py
CHANGED
@@ -102,8 +102,6 @@ class BaseBotModel(Credentials):
|
|
102
102
|
self.connected_channels = None
|
103
103
|
self.channels_users = None
|
104
104
|
self.users_count = None
|
105
|
-
self.messages_received: int = 0
|
106
|
-
self.messages_filtered: int = 0
|
107
105
|
self.recent_messages: List[str] = []
|
108
106
|
self.icon = None
|
109
107
|
self.active_channels = {}
|
@@ -162,6 +160,9 @@ class Server:
|
|
162
160
|
self.active = False
|
163
161
|
self.deleted = False
|
164
162
|
self.subscribers = 0
|
163
|
+
self.approximate_member_count = 0
|
164
|
+
self.messages_received: int = 0
|
165
|
+
self.messages_filtered: int = 0
|
165
166
|
|
166
167
|
@classmethod
|
167
168
|
def from_dic(cls, dic: dict):
|
@@ -174,6 +175,7 @@ class Server:
|
|
174
175
|
setattr(model, k, v)
|
175
176
|
|
176
177
|
model.channels = [Channel.from_dic(channel) for channel in dic.get("channels", [])]
|
178
|
+
model.subscribers = dic.get('approximate_member_count')
|
177
179
|
return model
|
178
180
|
|
179
181
|
def to_dic(self):
|
@@ -326,11 +328,11 @@ class UserModel(BaseModel):
|
|
326
328
|
def subscription_expired(self):
|
327
329
|
return self.subscription_expired_at.replace(tzinfo=UTC) < datetime.now(UTC)
|
328
330
|
|
329
|
-
def get_slack_user(self, slack_email: str):
|
330
|
-
return next(filter(lambda x: slack_email == x.email
|
331
|
+
def get_slack_user(self, slack_email: str) -> SlackUser:
|
332
|
+
return next(filter(lambda x: slack_email == x.email, self.slack_users), None)
|
331
333
|
|
332
|
-
def get_discord_user(self, login: str):
|
333
|
-
return next(filter(lambda x: login == x.login
|
334
|
+
def get_discord_user(self, login: str) -> DiscordUser:
|
335
|
+
return next(filter(lambda x: login == x.login, self.discord_users), None)
|
334
336
|
|
335
337
|
|
336
338
|
class DiscordUser(DictionaryModel):
|
File without changes
|
File without changes
|