Skip to content

Commit df26ea7

Browse files
committed
fix: db when in prod container
1 parent 27637f4 commit df26ea7

File tree

3 files changed

+7
-105
lines changed

3 files changed

+7
-105
lines changed

Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,4 @@ RUN mkdir -p db
2525

2626
EXPOSE 8080
2727

28-
# Keep container alive but don't run the application
2928
CMD ["tail", "-f", "/dev/null"]

docker-compose-prd.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ services:
44
container_name: ru-counter-app
55
restart: unless-stopped
66
environment:
7+
- DB_PATH=file:/root/db/session.db?_foreign_keys=on
78
- NUMBER_NEWSLETTERS=${NUMBER_NEWSLETTERS}
89
- NEWSLETTER_JID1=${NEWSLETTER_JID1}
910
- NEWSLETTER_NAME1=${NEWSLETTER_NAME1}

internal/whatsapp/client.go

Lines changed: 6 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,12 @@ func GetDetailedNewsletterData() (*NewsletterData, error) {
8282
func getDetailedSubscriberData(newsletters []NewsletterInfo) (*NewsletterData, error) {
8383
dbLog := waLog.Stdout("Database", "INFO", true)
8484

85-
container, err := sqlstore.New(context.Background(), "sqlite3", "file:../db/session.db?_foreign_keys=on", dbLog)
85+
dbPath := os.Getenv("DB_PATH")
86+
if dbPath == "" {
87+
dbPath = "file:../db/session.db?_foreign_keys=on"
88+
}
89+
90+
container, err := sqlstore.New(context.Background(), "sqlite3", dbPath, dbLog)
8691
if err != nil {
8792
return nil, err
8893
}
@@ -193,106 +198,3 @@ func getDetailedSubscriberData(newsletters []NewsletterInfo) (*NewsletterData, e
193198
Newsletters: updatedNewsletters,
194199
}, nil
195200
}
196-
197-
func getTotalSubscribers(jidStrs []string) (int, error) {
198-
dbLog := waLog.Stdout("Database", "INFO", true)
199-
200-
container, err := sqlstore.New(context.Background(), "sqlite3", "file:/root/db/session.db?_foreign_keys=on", dbLog)
201-
if err != nil {
202-
return 0, err
203-
}
204-
205-
deviceStore, err := container.GetFirstDevice(context.Background())
206-
if err != nil {
207-
return 0, err
208-
}
209-
210-
clientLog := waLog.Stdout("Client", "INFO", true)
211-
client := whatsmeow.NewClient(deviceStore, clientLog)
212-
213-
connected := make(chan bool, 1)
214-
reconnecting := make(chan bool, 1)
215-
216-
eventHandler := func(evt interface{}) {
217-
switch v := evt.(type) {
218-
case *events.QR:
219-
fmt.Println("QR code received, please scan it with your phone:")
220-
qrterminal.GenerateHalfBlock(v.Codes[0], qrterminal.L, os.Stdout)
221-
case *events.Connected:
222-
fmt.Println("WhatsApp connected successfully!")
223-
select {
224-
case connected <- true:
225-
default:
226-
}
227-
case *events.Disconnected:
228-
fmt.Println("WhatsApp disconnected, reconnecting...")
229-
select {
230-
case reconnecting <- true:
231-
default:
232-
}
233-
case *events.LoggedOut:
234-
fmt.Println("WhatsApp logged out")
235-
}
236-
}
237-
client.AddEventHandler(eventHandler)
238-
239-
err = client.Connect()
240-
if err != nil {
241-
return 0, fmt.Errorf("failed to connect: %v", err)
242-
}
243-
defer client.Disconnect()
244-
245-
fmt.Println("Waiting for WhatsApp connection and synchronization...")
246-
maxWaitTime := 120 * time.Second
247-
timeout := time.After(maxWaitTime)
248-
connectionStable := false
249-
250-
for !connectionStable {
251-
select {
252-
case <-connected:
253-
fmt.Println("Connected! Waiting for synchronization to complete...")
254-
stabilityCheck := time.After(10 * time.Second)
255-
stable := true
256-
257-
stabilityLoop:
258-
for stable {
259-
select {
260-
case <-reconnecting:
261-
fmt.Println("Reconnection detected, waiting for stability...")
262-
stable = false
263-
break stabilityLoop
264-
case <-stabilityCheck:
265-
connectionStable = true
266-
break stabilityLoop
267-
case <-timeout:
268-
return 0, fmt.Errorf("timeout waiting for stable connection")
269-
}
270-
}
271-
272-
case <-reconnecting:
273-
continue
274-
case <-timeout:
275-
return 0, fmt.Errorf("timeout waiting for WhatsApp connection")
276-
}
277-
}
278-
279-
fmt.Println("WhatsApp connection is stable. Fetching newsletter data...")
280-
time.Sleep(2 * time.Second)
281-
282-
var totalSubscribers int
283-
for _, jidStr := range jidStrs {
284-
jid, err := types.ParseJID(jidStr)
285-
if err != nil {
286-
return 0, err
287-
}
288-
289-
info, err := client.GetNewsletterInfo(jid)
290-
if err != nil {
291-
return 0, fmt.Errorf("failed to get newsletter info for %s: %v", jidStr, err)
292-
}
293-
294-
totalSubscribers += int(info.ThreadMeta.SubscriberCount)
295-
}
296-
297-
return totalSubscribers, nil
298-
}

0 commit comments

Comments
 (0)