<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; //trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Tue, 06 Oct 2026 22:19:10 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Thu, 10 Sep 2026 03:00:55 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37565 – IMEI activation: 20s tick lanes for oppo/realme/vivo, idle once the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;IMEI activation: 20s tick lanes for oppo/realme/vivo, idle once the day clears&lt;br /&gt;
&lt;br /&gt;
Replaces the two once-a-day passes with chunk-per-tick lanes. Each tick takes one&lt;br /&gt;
chunk and returns; when a brand&apos;s pool comes back empty its turn is skipped, and&lt;br /&gt;
when everything is clear the ticks do nothing and stay silent until midnight.&lt;br /&gt;
&lt;br /&gt;
- browser lane (StandAlone): one chunk of 25 for one brand every 20s, oppo and&lt;br /&gt;
  realme by turns. Still exactly one ChromeDriver alive at a time.&lt;br /&gt;
- vivo lane: its own tick, chunk of 250. It must not share the browser lane --&lt;br /&gt;
  0.24s an imei against oppo&apos;s 10.2s means it would need ~70 hours behind them&lt;br /&gt;
  for work it does alone in 39 minutes.&lt;br /&gt;
&lt;br /&gt;
The snapshot is gone; the pool query is the cursor. That is what makes a restart&lt;br /&gt;
cost one chunk instead of the day: the 12:03 restart on 09-Sep forfeited ~4,000&lt;br /&gt;
lookups and the whole afternoon, and last_finish had read -1 for three days.&lt;br /&gt;
&lt;br /&gt;
The snapshot existed to stop the re-ask loop (realme, 29-Aug: 4,524 requests&lt;br /&gt;
against 1,004 distinct imeis). That is now closed at the source instead -- oppo,&lt;br /&gt;
realme and motorola stamp every imei they asked about, not just the ones that&lt;br /&gt;
produced a map entry, so a failed lookup rests until tomorrow rather than coming&lt;br /&gt;
back on the next tick. Motorola is fixed pre-emptively; nothing schedules it yet.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
- secondary and tertiary are merged by turns rather than concatenated. Safe while&lt;br /&gt;
  a pass walked to the end; without that guarantee oppo&apos;s 163 tertiary serials sat&lt;br /&gt;
  behind 3,819 secondary ones and would only be reached on a day that cleared.&lt;br /&gt;
- vivo abandons a tick rather than the chunk when the captcha solver returns no&lt;br /&gt;
  code -- one probe per 20s while it is down instead of 250, and no rows rested&lt;br /&gt;
  over a transient outage.&lt;br /&gt;
- the funnel gauges move from a pass to a day. due is measured on the first tick&lt;br /&gt;
  after midnight, the rest accumulate, and last_finish_epoch becomes a real&lt;br /&gt;
  completion clock. Truncation is detected at the midnight rollover, which is the&lt;br /&gt;
  case that never reaches an end-of-run at all.&lt;br /&gt;
&lt;br /&gt;
This does not create capacity. At the 21s/imei measured on 09-Sep the pool still&lt;br /&gt;
needs ~35 hours and will not clear; it now rolls over visibly instead of silently.&lt;br /&gt;
The lever for that is DAYS=1.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/ImeiActivationGauges.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/MotorolaImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OppoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/RealmeImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37565</guid></item>
<item><pubDate>Mon, 31 Aug 2026 17:59:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37482 – carlcare: recover tecno/itel activation dates, and fix trunk broken by ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;carlcare: recover tecno/itel activation dates, and fix trunk broken by r37479&lt;br /&gt;
&lt;br /&gt;
r37479/r37480 swept a working-copy edit to Application.java into the mail commit: trunk&lt;br /&gt;
has called scheduledTasks.checkCarlcareImeiActivation() since then without containing it,&lt;br /&gt;
so profitmandi-cron has not compiled. This adds the rest.&lt;br /&gt;
&lt;br /&gt;
WHAT THIS IS&lt;br /&gt;
&lt;br /&gt;
The tecno feed has been dead since 2024-11-20, when transsion decommissioned the SAP&lt;br /&gt;
OData hosts cms.tecno-mobile.com:8099 / cms.itel-mobile.com:8099. The imwav DCR portal&lt;br /&gt;
recovers itel but has nothing for tecno -- all three tecno logins together expose 17&lt;br /&gt;
imeis over five years, against 31,928 tecno rows in fofo.activated_imei. Everything since&lt;br /&gt;
has been manual CSV via /imei/upload.&lt;br /&gt;
&lt;br /&gt;
Carlcare is transsion&apos;s own after-sales arm, and the warranty-check page on carlcare.in is&lt;br /&gt;
backed by a public per-imei endpoint that answers for tecno, itel and infinix with no&lt;br /&gt;
login, no cookie and no captcha:&lt;br /&gt;
&lt;br /&gt;
  GET ind-mis-carl.shalltry.com/CarlcareClient/electronic-card/check-extended_warranty-web?imei=&lt;br /&gt;
  sign: md5(SALT + imei)&lt;br /&gt;
&lt;br /&gt;
The sign header is mandatory (without it: code 10022 &quot;Sorry, web sign is error&quot;). The salt&lt;br /&gt;
is in the site&apos;s own bundle, _nuxt/085537c.js module 688, along with the base url; re-read&lt;br /&gt;
that bundle if it ever stops working. status 3 = activated and carries activeTime, status&lt;br /&gt;
2 = device known but not activated yet and activeTime is null.&lt;br /&gt;
&lt;br /&gt;
It is also the semantically right source. The DCR portal serves an INVENTORY report and&lt;br /&gt;
the old SAP feed served a TERTIARY SALES report, whereas activeTime is the date the&lt;br /&gt;
handset was actually activated -- which is what fofo.activated_imei is meant to hold and&lt;br /&gt;
what tertiary payout is computed on.&lt;br /&gt;
&lt;br /&gt;
Measured against hadb1 before writing any of this: tecno 355463920708766 -&gt; 2026-08-28 and&lt;br /&gt;
itel 359207322028000 -&gt; 2026-08-30, both exact matches to rows we already had. A read-only&lt;br /&gt;
trial of 50 itel imeis answered 50/50 with no errors and no sign rejections, agreed with&lt;br /&gt;
our catalog brand on all 50, and returned a date for 18 -- every one of those 18 falling&lt;br /&gt;
AFTER our own billing date, 3 to 1,111 days, median ~220.&lt;br /&gt;
&lt;br /&gt;
SHAPE&lt;br /&gt;
&lt;br /&gt;
Pool queries and saveActivation semantics are the vivo ones, so the two read alike, and no&lt;br /&gt;
DAO change was needed: the pending queries are already brand-generic. The far end is far&lt;br /&gt;
cheaper than vivo&apos;s, one signed GET per imei, so there is no captcha service, no cookie&lt;br /&gt;
store, no session seeding and no verdict reporting.&lt;br /&gt;
&lt;br /&gt;
50 imeis every 5 minutes = 14,400 lookups a day against ~10,400 pending itel, so the whole&lt;br /&gt;
pool is covered daily with headroom. The pool reaches back to 2021, so the ticks are&lt;br /&gt;
themselves the backfill of the nov-2024 blackout; there is no one-off to run.&lt;br /&gt;
&lt;br /&gt;
Two things worth knowing before changing it:&lt;br /&gt;
&lt;br /&gt;
- The batch is drawn ROUND-ROBIN across each (brand, channel) queue, not by concatenating&lt;br /&gt;
  them. A full daily pass can concatenate freely because it walks to the end, but a&lt;br /&gt;
  50-at-a-time tick cannot: itel is ~1,550 secondary against ~8,851 tertiary, so the head&lt;br /&gt;
  of a concatenated list is ~31 straight ticks of pure secondary before one tertiary imei&lt;br /&gt;
  is asked about. The first trial batch was 100% secondary for exactly that reason.&lt;br /&gt;
&lt;br /&gt;
- Every outcome stamps the row, failures included. This is the one deliberate departure&lt;br /&gt;
  from vivo, which leaves a failure unrecorded so it retries next pass -- safe there&lt;br /&gt;
  because the next pass is tomorrow. On a 5-minute cadence it is not: an unstamped imei is&lt;br /&gt;
  due again in five minutes, the query keeps handing back the same 50 rows, the batch never&lt;br /&gt;
  advances past them, and the endpoint is asked the same questions twelve times an hour for&lt;br /&gt;
  as long as it keeps failing. See the runaway documented on oppoRealmeImeiActivation.&lt;br /&gt;
&lt;br /&gt;
BRANDS is itel alone to start. That is a rollout order, not a limit of the endpoint: itel&lt;br /&gt;
is the brand we can CHECK, because the DCR pull independently produces itel dates to&lt;br /&gt;
reconcile against, where tecno has nothing. Add &quot;Tecno&quot; once a day&apos;s rows agree. Both feeds&lt;br /&gt;
may write itel meanwhile with no coordination -- the pool query only returns imeis whose&lt;br /&gt;
activationTimestamp is still null, so whatever one fills has left the other&apos;s pool.&lt;br /&gt;
&lt;br /&gt;
Scheduled tick plus a --checkCarlcareImeiActivation flag, both wired.&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CarlcareImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37482</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37482</guid></item>
<item><pubDate>Mon, 31 Aug 2026 16:08:03 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37472 – IMEI activation: one snapshotted daily pass per brand, on one ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 12 file(s) modified&lt;/strong&gt;&lt;br/&gt;IMEI activation: one snapshotted daily pass per brand, on one thread, with per-brand metrics&lt;br /&gt;
&lt;br /&gt;
Four @Scheduled jobs every 5 minutes become two daily passes. Oppo and realme&lt;br /&gt;
share one thread and alternate in 25-imei chunks, so exactly one ChromeDriver is&lt;br /&gt;
alive at a time instead of four; vivo keeps its own thread since it is direct&lt;br /&gt;
HTTP and does not contend for a browser.&lt;br /&gt;
&lt;br /&gt;
The pass snapshots its pool before any browser starts and walks that list to the&lt;br /&gt;
end. It never re-queries, and that is the actual fix. A failed lookup never&lt;br /&gt;
reaches dateMap.put, so no row is written, so createTimestamp is not bumped, so&lt;br /&gt;
the imei was eligible again on the next tick five minutes later. Measured 29-Aug:&lt;br /&gt;
realme issued 4,524 requests against 1,004 distinct imeis -- 4.5 asks each, 78%&lt;br /&gt;
of the day&apos;s budget spent re-asking -- while oppo, which rarely fails, sat at&lt;br /&gt;
1.03. More requests hardened the block, which caused more failures. A pass bounds&lt;br /&gt;
that: a failure costs one retry tomorrow, never one in five minutes.&lt;br /&gt;
&lt;br /&gt;
This supersedes the r37447/r37448/r37449 argument about driver count, which was&lt;br /&gt;
about the wrong variable. That argument blamed realme&apos;s collapse on CPU&lt;br /&gt;
contention pushing the captcha render past the element waits. The logs do not&lt;br /&gt;
support it: on 29-Aug oppo took ZERO canvas timeouts across all 24 hours on the&lt;br /&gt;
same box, same six cores, same driver count, same captcha vendor, load average&lt;br /&gt;
0.9 -- including the 15:00-23:00 window in which realme solved nothing at all.&lt;br /&gt;
Realme&apos;s own canvas wait is 15s against oppo&apos;s 8s, so the longer wait is the one&lt;br /&gt;
expiring. What realme&apos;s timeout rate tracks is its own daily request volume, and&lt;br /&gt;
it resets at midnight: 920/day -&gt; 0.3%, 3,467/day -&gt; 28%, 4,524/day -&gt; 75%. That&lt;br /&gt;
is realme.com declining to serve the widget.&lt;br /&gt;
&lt;br /&gt;
DAYS=0 is deliberate and is not an off-by-one: the pool filter is&lt;br /&gt;
createTimestamp &amp;lt; now().atStartOfDay().minusDays(DAYS), so DAYS=1 measures&lt;br /&gt;
against yesterday midnight and silently yields a two-day cadence, which is what&lt;br /&gt;
oppo and realme were running.&lt;br /&gt;
&lt;br /&gt;
Sizing measured on prod for a midnight start: oppo 4,133 and realme 2,118 imeis,&lt;br /&gt;
11.7h + 8.4h = 20.1 hours of a single thread. It fits with no slack; if the&lt;br /&gt;
&apos;pass finished&apos; counts come in short of &apos;pass starting&apos;, the lever is DAYS=1&lt;br /&gt;
rather than a second thread.&lt;br /&gt;
&lt;br /&gt;
Observability: ImeiActivationGauges publishes the funnel per brand on&lt;br /&gt;
/actuator/prometheus, which alloy already scrapes on this host -- due, churned,&lt;br /&gt;
captcha_shown, captcha_solved, answered, dates_found, errors, run_seconds and&lt;br /&gt;
last_finish_epoch. Each stage fails differently and says what broke. Rates are&lt;br /&gt;
left to PromQL. The stage that matters for health is answered: churned&gt;0 with&lt;br /&gt;
answered==0 is precisely the shape of both silent outages this year (oppo wrote&lt;br /&gt;
nothing for a week; the vivo captcha solver was dead for 46 days). dates_found is&lt;br /&gt;
deliberately NOT a health signal -- when the multi-year backlog drained at the&lt;br /&gt;
end of August, yield fell from ~100% to 2-3% on the same day across all three&lt;br /&gt;
brands with nothing broken.&lt;br /&gt;
&lt;br /&gt;
Nagios cleanup: the Nagios server and every NRPE daemon are gone, so&lt;br /&gt;
WriteToPropertiesFile and the commented-out blocks that fed&lt;br /&gt;
nagios-cron.properties are deleted, and NagiosMonitorTasks is renamed&lt;br /&gt;
BalanceMonitorTasks for the transport it actually uses. Noted there that nothing&lt;br /&gt;
calls it -- there is no @Scheduled entry and no other caller -- which is why both&lt;br /&gt;
balance gauges have always read -1.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/BalanceGauges.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/BalanceMonitorTasks.java &lt;i&gt;(copied from /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/NagiosMonitorTasks.java@37471)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/ImeiActivationGauges.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/NagiosMonitorTasks.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/properties/WriteToPropertiesFile.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37472</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37472</guid></item>
<item><pubDate>Sat, 29 Aug 2026 14:31:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37459 – Motorola IMEI activation: secondary + tertiary in one browser session ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Motorola IMEI activation: secondary + tertiary in one browser session&lt;br /&gt;
&lt;br /&gt;
Mirrors the oppo/realme combined jobs. MotorolaImeiActivationService drives&lt;br /&gt;
CheckMotorolaWarrantyTask, with MotorolaChallengeSolver for the challenge.&lt;br /&gt;
&lt;br /&gt;
Cadence comes from the pool query, which defers an imei for `days` after each&lt;br /&gt;
attempt (saveActivation bumps createTimestamp even when no date came back), so&lt;br /&gt;
days=2 retries everything every two days. Pending pool measured 1,534&lt;br /&gt;
(1,182 secondary + 352 tertiary); at ~10-14s/imei, 60 per invocation is about&lt;br /&gt;
12 minutes of driver time and clearing the pool inside 48h needs roughly 26&lt;br /&gt;
invocations, i.e. an OS cron entry every 90 minutes.&lt;br /&gt;
&lt;br /&gt;
Do NOT schedule it inside the oppo/realme window: each driver tree costs&lt;br /&gt;
~850MB and this box has been OOM-killed twice with tomcat the victim, so peak&lt;br /&gt;
concurrent drivers is the number that matters.&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckMotorolaWarrantyTask.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/MotorolaChallengeSolver.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/MotorolaImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37459</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37459</guid></item>
<item><pubDate>Fri, 28 Aug 2026 12:08:39 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37448 – Daily re-check for all brands; Oppo back to parallel pools ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Daily re-check for all brands; Oppo back to parallel pools&lt;br /&gt;
&lt;br /&gt;
Two changes.&lt;br /&gt;
&lt;br /&gt;
1. Re-check window 4 days (secondary) and 2 days (tertiary) -&gt; 1 day everywhere.&lt;br /&gt;
   Daily demand becomes the full universe rather than a fraction of it:&lt;br /&gt;
&lt;br /&gt;
     Oppo    4,798 + 4,040 =  8,838/day&lt;br /&gt;
     Vivo    9,407 +   675 = 10,082/day   (doing 15,345 -- fine)&lt;br /&gt;
     Realme  1,973 + 1,081 =  3,054/day&lt;br /&gt;
&lt;br /&gt;
2. Oppo&apos;s two pools run in PARALLEL again, reverting the merge in r37447 for that&lt;br /&gt;
   brand only. Realme stays merged.&lt;br /&gt;
&lt;br /&gt;
   The merge was a straight trade of throughput for memory and oppo could not&lt;br /&gt;
   afford it. Measured over 32 minutes and again over an hour the next morning:&lt;br /&gt;
   3,555 then 3,456/day against 5,280 before merging. Batch cadence settled at a&lt;br /&gt;
   very regular ~15.5 min per cycle, so a 30-imei merged batch takes ~10.5 min =&lt;br /&gt;
   ~21s/imei, against the 10.2s it managed unmerged. At 21s the ceiling is&lt;br /&gt;
   86400/21 = 4,114/day even with zero idle, so no batch size and no shorter&lt;br /&gt;
   fixedDelay could have reached 8,838. Serialising simply costs more per imei&lt;br /&gt;
   here than running two browsers does.&lt;br /&gt;
&lt;br /&gt;
   Realme keeps the merge: it needs 3,054/day and delivers 2,952 merged, so a&lt;br /&gt;
   small size bump covers it without a second browser.&lt;br /&gt;
&lt;br /&gt;
Sizes: oppo 25 per pool (2 jobs in parallel), realme 12+12 merged, vivo 50+10&lt;br /&gt;
unchanged. Vivo has already cleared its entire secondary backlog -- the pool&lt;br /&gt;
reads 0 and both lists come back empty -- which is what the batch of 50 was for.&lt;br /&gt;
&lt;br /&gt;
Cost: oppo goes back to two concurrent drivers, so the fleet is 3 rather than 2,&lt;br /&gt;
roughly +700MB. Acceptable against the ~2GB freed today by reaping orphaned&lt;br /&gt;
browsers and capping retries, but it is the reason realme was left merged.&lt;br /&gt;
&lt;br /&gt;
Sizes are a starting point, not a final answer: oppo&apos;s per-imei time differs&lt;br /&gt;
markedly between merged and parallel modes, so re-measure before tuning further.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37448</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37448</guid></item>
<item><pubDate>Thu, 27 Aug 2026 20:36:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37447 – Selenium: one browser per brand instead of one per pool ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Selenium: one browser per brand instead of one per pool&lt;br /&gt;
&lt;br /&gt;
Oppo and Realme each ran secondary and tertiary as separate @Scheduled jobs, so&lt;br /&gt;
each brand opened two ChromeDrivers at once and the fleet ran four. Each driver&lt;br /&gt;
tree costs roughly 850MB. This box co-hosts a 9.4GB tomcat with ~3GB available&lt;br /&gt;
and has been OOM-killed twice this month -- tomcat was the victim both times, so&lt;br /&gt;
peak concurrency is the thing that matters here.&lt;br /&gt;
&lt;br /&gt;
Combined into one job per brand. Nothing downstream changes: the two pools differ&lt;br /&gt;
only in which named query fills them, and both already funnel into the same&lt;br /&gt;
updateActivationDate -&gt; checkWarranty -&gt; saveActivation path. They are disjoint by&lt;br /&gt;
construction (secondary excludes anything with a FofoLineItem, tertiary is&lt;br /&gt;
FofoLineItem-based); distinct() is insurance, not a fix for a known overlap.&lt;br /&gt;
&lt;br /&gt;
Sizing matters, because merging SERIALISES work that used to run in parallel and&lt;br /&gt;
keeping the old batch sizes would quietly cost throughput. Measured post-cap at&lt;br /&gt;
10.2s/imei (oppo, down from 14.6 after r37445) and 14.2s/imei (realme), solving&lt;br /&gt;
M * 86400 / (300 + M*t):&lt;br /&gt;
&lt;br /&gt;
  oppo    2 parallel jobs x10 = 4,299/day  -&gt;  merged 15+15 = 4,277/day  (parity)&lt;br /&gt;
  realme  2 parallel jobs x10 = 3,910/day  -&gt;  merged 10+10 = 2,959/day  (-24%)&lt;br /&gt;
&lt;br /&gt;
Oppo is sized to hold parity because it is already short of its 4,798/day need.&lt;br /&gt;
Realme is left at 20 -- it needs 2,243/day, so it can absorb the dip in exchange&lt;br /&gt;
for shorter batches and a shorter-lived browser.&lt;br /&gt;
&lt;br /&gt;
What this saves and does not save: total driver-SECONDS are roughly unchanged,&lt;br /&gt;
which is the point of resizing. PEAK concurrent drivers halves from 4 to 2.&lt;br /&gt;
&lt;br /&gt;
Also skips starting a browser at all when both pools come back empty -- currently&lt;br /&gt;
never true, but it costs nothing and a browser launched to do nothing is pure&lt;br /&gt;
waste on this box.&lt;br /&gt;
&lt;br /&gt;
checkOppoImeiStatus/Tertiary and the realme equivalents are left in place for&lt;br /&gt;
manual invocation; they are simply no longer scheduled.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37447</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37447</guid></item>
<item><pubDate>Thu, 27 Aug 2026 20:27:13 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37446 – Per-brand batch sizes, and stop chrome forking a GPU process ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Per-brand batch sizes, and stop chrome forking a GPU process it cannot use&lt;br /&gt;
&lt;br /&gt;
maxResults was hardcoded in the shared repository methods, so Oppo and Vivo were&lt;br /&gt;
forced to the same secondary batch (10) and all three to the same tertiary (10).&lt;br /&gt;
It is now a parameter, set per brand at the call site.&lt;br /&gt;
&lt;br /&gt;
Sizing is arithmetic, from measured IN-BATCH per-imei time. Solving&lt;br /&gt;
M * 86400 / (300 + M*t) = needed/day:&lt;br /&gt;
&lt;br /&gt;
  brand    needed/day   t       M required   set to&lt;br /&gt;
  Vivo         9,407    0.8s        36         50    clears, ~12,700/day&lt;br /&gt;
  Realme       1,973   13.4s        10         10    was 5 = ~1,177/day, short&lt;br /&gt;
  Oppo         4,798   14.6s        88         10    HELD, see below&lt;br /&gt;
&lt;br /&gt;
Correcting an earlier measurement of mine: I reported Vivo at 13.6s per imei and&lt;br /&gt;
concluded its backlog could not be cleared. That averaged across the ~300s idle&lt;br /&gt;
gaps BETWEEN batches. In-batch it is 0.8s -- Vivo is 17x faster than I said, is&lt;br /&gt;
idle ~97% of the time, and 50 clears its pool comfortably. There is no wait in&lt;br /&gt;
the Vivo path; it is simply fast.&lt;br /&gt;
&lt;br /&gt;
Oppo is deliberately NOT raised. At 14.6s it would need M=88, which means&lt;br /&gt;
20-minute batches and near-permanent chrome sessions. But that 14.6s predates the&lt;br /&gt;
retry cap (r37445), which cuts exhausted imeis from 20 attempts to 7 and should&lt;br /&gt;
drop it sharply. Re-measure before sizing Oppo, rather than guessing high on a&lt;br /&gt;
box with 3GB free.&lt;br /&gt;
&lt;br /&gt;
Also: --disable-gpu, --disable-dev-shm-usage, --disable-software-rasterizer on&lt;br /&gt;
both selenium tasks. Headless needs no GPU yet chrome forks a gpu-process per&lt;br /&gt;
browser -- 6 were alive across the fleet, pure overhead. No behaviour change.&lt;br /&gt;
&lt;br /&gt;
Batch size does not raise peak concurrency (fixedDelay means one batch per job at&lt;br /&gt;
a time, so never more than 4 drivers). It raises DUTY CYCLE, which converts&lt;br /&gt;
chrome&apos;s footprint from intermittent to sustained. That matters here: tomcat is&lt;br /&gt;
9.4GB, available is ~3GB, and the two OOM kills this month both took tomcat.&lt;br /&gt;
&lt;br /&gt;
Cron-only deploy. The dao signature change has no callers outside cron.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37446</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=37446</guid></item>
<item><pubDate>Sun, 17 May 2026 15:36:54 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36580 – Adjust IMEI activation deferral: secondary 4 days, tertiary 2 days ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Adjust IMEI activation deferral: secondary 4 days, tertiary 2 days for Vivo/Oppo/Realme&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=36580</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=36580</guid></item>
<item><pubDate>Sun, 12 Apr 2026 10:26:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36253 – Separate secondary/tertiary IMEI activation crons for Vivo/Oppo/Realme, perf fixes: shared ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Separate secondary/tertiary IMEI activation crons for Vivo/Oppo/Realme, perf fixes: shared saveActivation, Response leak fixes, /tmp cleanup, OpenCV static init, early break, remove class-level @Transactional from StandAlone&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OppoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/RealmeImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=36253</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=36253</guid></item>
<item><pubDate>Mon, 14 Apr 2025 19:08:16 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 34420 – Added Realme Activation capture logic</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added Realme Activation capture logic&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/migrations/RunOnceTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=34420</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=34420</guid></item>
<item><pubDate>Mon, 14 Apr 2025 17:47:02 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 34418 – config</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;config&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=34418</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=34418</guid></item>
<item><pubDate>Fri, 09 Sep 2022 16:00:29 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 30937 – Fixed activation logic</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed activation logic&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30937</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30937</guid></item>
<item><pubDate>Wed, 18 May 2022 10:59:02 +0530</pubDate><dc:creator>tejbeer</dc:creator><title>Rev 30430 – change</title><description>&lt;div&gt;&lt;strong&gt;tejbeer – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;change&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ActivatedImeiRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30430</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30430</guid></item>
<item><pubDate>Thu, 28 Apr 2022 17:21:21 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 30353 – Fixed ahead issue</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed ahead issue&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30353</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30353</guid></item>
<item><pubDate>Thu, 28 Apr 2022 15:17:32 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 30352 – Fixed oppo</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed oppo&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OppoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30352</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30352</guid></item>
<item><pubDate>Sun, 17 Apr 2022 17:48:59 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 30315 – Added Einvoice Files</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added Einvoice Files&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OppoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30315</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30315</guid></item>
<item><pubDate>Thu, 14 Apr 2022 20:00:49 +0530</pubDate><dc:creator>amit.gupta</dc:creator><title>Rev 30308 – Added Einvoice Files</title><description>&lt;div&gt;&lt;strong&gt;amit.gupta – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added Einvoice Files&lt;/div&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/migrations/StandAlone.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30308</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FStandAlone.java&amp;rev=30308</guid></item>
</channel></rss>