<?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/ScheduledSkeleton.java</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Wed, 16 Sep 2026 12:35:51 +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%2FScheduledSkeleton.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%2FScheduledSkeleton.java&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Tue, 15 Sep 2026 17:39:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37642 – Hot Deal brand: remove the 00:20 window-sync job and its ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: remove the 00:20 window-sync job and its CLI flag - no date windows any more&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37642</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37642</guid></item>
<item><pubDate>Fri, 11 Sep 2026 19:24:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37595 – Move the full partner-limit pass from every 20 minutes to ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Move the full partner-limit pass from every 20 minutes to daily&lt;br /&gt;
&lt;br /&gt;
The 2-minute sweep already recalculates the limit for every partner whose base&lt;br /&gt;
moved, which covers investment and utilisation - the inputs that actually change.&lt;br /&gt;
The full 980-partner rescan only exists for inputs base cannot see: credit risk,&lt;br /&gt;
the SIDBI floor and hard_limit.&lt;br /&gt;
&lt;br /&gt;
Those move on a far slower clock. RISK_DECREASE_DAYS_THRESHOLD is 90 days, and&lt;br /&gt;
transaction.fofo_sidbi_sanction has had no new row since Oct 2024 and no recorded&lt;br /&gt;
settlement. Running the rescan 72 times a day to catch them was 71 wasted passes.&lt;br /&gt;
&lt;br /&gt;
Folded into the existing daily job, after the aged-stock refresh so the limit pass&lt;br /&gt;
sees haircuts for partners whose Apple or demo stock crossed its threshold&lt;br /&gt;
overnight. Leaves two scheduled jobs instead of three.&lt;br /&gt;
&lt;br /&gt;
Limit latency is unaffected - that is the 2-minute sweep&apos;s job and it is unchanged&lt;br /&gt;
(~3 partners per window show a changed base, peak 18). The --updatePartnerLimitWithBatch&lt;br /&gt;
CLI entrypoint is untouched for manual runs.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37595</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37595</guid></item>
<item><pubDate>Fri, 11 Sep 2026 17:30:03 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37589 – Drive credit limits off the investment sweep; stop phantom limit ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Drive credit limits off the investment sweep; stop phantom limit writes&lt;br /&gt;
&lt;br /&gt;
Adds the 2-minute sweep schedule and points the limit recalculation at the&lt;br /&gt;
partners whose base_value actually moved, instead of rescanning all 980 every&lt;br /&gt;
20 minutes. Measured on production: 3 partners change per 2-minute window on&lt;br /&gt;
average, peak 18.&lt;br /&gt;
&lt;br /&gt;
- ScheduledSkeleton: 2-min sweepPartnerInvestment, daily refreshAgedStockDaily&lt;br /&gt;
  at 00:20; the 20-min full pass is kept as a backstop for inputs base does not&lt;br /&gt;
  capture (risk, the SIDBI floor, hard_limit)&lt;br /&gt;
- BatchScheduledTasks.sweepPartnerInvestment: sweep, then limits for changed&lt;br /&gt;
  bases only&lt;br /&gt;
- calculateChangedPartnerLimits(restrictTo) to support that&lt;br /&gt;
- scaleMoney(): round to paise before comparing and storing. The limit comes out&lt;br /&gt;
  of a double multiply, so 65123.7400 round-tripped as 65123.740000000005 and&lt;br /&gt;
  compareTo called it a change. 208 of 230 &apos;changed&apos; partners in one production&lt;br /&gt;
  run differed by under half a paisa, rewriting sd_credit_requirement and&lt;br /&gt;
  dtr.credit_account ~14,000 times a day for identical values and churning the&lt;br /&gt;
  SIDBI mirror. Real changes were never below a rupee, so 2dp cannot suppress one.&lt;br /&gt;
- getFirstBillingDates: one grouped query instead of one per partner&lt;br /&gt;
&lt;br /&gt;
Credit limits for 24 partners will rise on the first sweep after deploy - that is&lt;br /&gt;
the aged-Apple double-deduction correction landing (see r37588), not a defect.&lt;br /&gt;
&lt;br /&gt;
NOTE: cron is a standalone Spring Boot jar; the new schedules only fire once it&lt;br /&gt;
is restarted with --spring.profiles.active=scheduled.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/BatchScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/PartnerLimitHelper.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37589</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37589</guid></item>
<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%2FScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37565</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:09:28 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37499 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SalesTargets.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesTargetsRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesTargetsRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciLombardService.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%2FScheduledSkeleton.java&amp;rev=37499</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37499</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%2FScheduledSkeleton.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%2FScheduledSkeleton.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%2FScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37472</guid></item>
<item><pubDate>Fri, 28 Aug 2026 20:25:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37449 – Realme unmerged too: four selenium jobs, one per pool per ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Realme unmerged too: four selenium jobs, one per pool per brand&lt;br /&gt;
&lt;br /&gt;
r37447 merged secondary and tertiary per brand to halve concurrent drivers.&lt;br /&gt;
r37448 reverted that for oppo, because serialising cost it more per imei than a&lt;br /&gt;
second browser did. This reverts it for realme as well, which ends the merge&lt;br /&gt;
experiment entirely.&lt;br /&gt;
&lt;br /&gt;
What the merge actually cost realme is only visible now that oppo is parallel&lt;br /&gt;
again: realme&apos;s per-imei went 14.2s -&gt; 29s. It did not change behaviour -- it is&lt;br /&gt;
simply competing with oppo&apos;s two browsers for CPU. At 29s its merged ceiling is&lt;br /&gt;
86400/29 = 2,979/day, just under the 3,054/day the daily re-check needs, so no&lt;br /&gt;
batch size could have closed the gap. Two parallel pools restore the ~3,900/day&lt;br /&gt;
it managed historically at four drivers.&lt;br /&gt;
&lt;br /&gt;
Measured before this change (25 min window):&lt;br /&gt;
&lt;br /&gt;
  brand    needed/day   throughput   note&lt;br /&gt;
  Oppo         8,838       7,661     parallel revert worked, +122%&lt;br /&gt;
  Realme       3,054       1,843     merged and CPU-starved&lt;br /&gt;
  Vivo        10,082      16,128     surplus, cannot transfer to another brand&lt;br /&gt;
&lt;br /&gt;
Sizes unchanged: oppo 25 per pool, realme 12 per pool, vivo 50+10.&lt;br /&gt;
&lt;br /&gt;
Honest accounting of the merge: it was my idea, sized on per-brand arithmetic that&lt;br /&gt;
ignored contention between brands, and it is now fully reverted. What survives&lt;br /&gt;
from that line of work is the part that actually paid -- reaping orphaned browsers&lt;br /&gt;
(~1.8GB), the per-brand retry caps, and per-brand maxResults. Peak drivers are&lt;br /&gt;
back to 4, which is where they started.&lt;br /&gt;
&lt;br /&gt;
Watch for contention: four browsers is the configuration that produced the 29s&lt;br /&gt;
figure for realme in the first place, so oppo may slow from its current 19.7s.&lt;br /&gt;
Re-measure both before tuning sizes again.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37449</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37449</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%2FScheduledSkeleton.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%2FScheduledSkeleton.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%2FScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37447</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:24:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37395 – observability: retire the dead Nagios monitoring path, migrate balance signals ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;observability: retire the dead Nagios monitoring path, migrate balance signals to Micrometer&lt;br /&gt;
&lt;br /&gt;
There is no Nagios server and the NRPE daemons have been removed from every&lt;br /&gt;
host, so the properties files written under /var/log/services were being&lt;br /&gt;
produced for nobody.&lt;br /&gt;
&lt;br /&gt;
Deleted:&lt;br /&gt;
 - CronMetricsService: zero references. Spring instantiated the @Service so its&lt;br /&gt;
   constructor registered three meters, but nothing ever incremented them --&lt;br /&gt;
   cron_execution_* read 0 in prometheus while cron_job_count_total (from&lt;br /&gt;
   CronJobMonitorAspect) had recorded 1,597 executions.&lt;br /&gt;
 - NagiosMonitoringScheduledSkeleton.&lt;br /&gt;
&lt;br /&gt;
Removed the nagios properties writes from ScheduledSkeleton (-155 lines) and&lt;br /&gt;
KnowlarityCallMonitorScheduler (-46, including its now-purposeless&lt;br /&gt;
markTaskComplete helper). These recorded a per-job 0/1 status that&lt;br /&gt;
CronJobMonitorAspect already captures properly as success, failure and&lt;br /&gt;
duration metrics.&lt;br /&gt;
&lt;br /&gt;
Kept the two signals that are genuinely useful: SMS gateway balance and the&lt;br /&gt;
ThinkWalnut recharge wallet balance now publish as Micrometer gauges via the&lt;br /&gt;
new BalanceGauges component, scraped from /actuator/prometheus. -1 means &apos;not&lt;br /&gt;
read yet&apos; so a scrape before the first run is distinguishable from a real zero.&lt;br /&gt;
&lt;br /&gt;
No behaviour change to any scheduled job. Compiles clean.&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/BalanceGauges.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/CronMetricsService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/NagiosMonitorTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/knowlarity/KnowlarityCallMonitorScheduler.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/NagiosMonitoringScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37395</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37395</guid></item>
<item><pubDate>Tue, 11 Aug 2026 15:59:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37292 – Hot deals: javadoc matches reindex-based sync  syncHotDealFlags no longer ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot deals: javadoc matches reindex-based sync&lt;br /&gt;
&lt;br /&gt;
syncHotDealFlags no longer mirrors model_hot_deal into tag_listing.hot_deals;&lt;br /&gt;
since r37276 hot_deal_b is derived from the active window at index time, so the&lt;br /&gt;
daily job re-indexes models whose window opened today or closed yesterday.&lt;br /&gt;
Comment-only, no behaviour change.&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/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=37292</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37292</guid></item>
<item><pubDate>Thu, 06 Aug 2026 16:30:37 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37258 – Schedule syncHotDealFlags daily 00:20 (ScheduledSkeleton) + --syncHotDealFlags CLI arg: completes ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Schedule syncHotDealFlags daily 00:20 (ScheduledSkeleton) + --syncHotDealFlags CLI arg: completes r37255 - without the skeleton trigger the tag_listing.hot_deals mirror never runs, so deal windows would not start/expire in Solr&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/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37258</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37258</guid></item>
<item><pubDate>Tue, 04 Aug 2026 19:21:13 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37234 – Updated Gmail Timeout</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Updated Gmail Timeout&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37234</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37234</guid></item>
<item><pubDate>Tue, 04 Aug 2026 18:49:00 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37230 – Updated Gmail Timeout</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Updated Gmail Timeout&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37230</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37230</guid></item>
<item><pubDate>Thu, 30 Jul 2026 12:34:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37172 – PJP agenda instances: nightly 23:45 sync cron + manual run ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;PJP agenda instances: nightly 23:45 sync cron + manual run arg&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=37172</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37172</guid></item>
<item><pubDate>Thu, 30 Jul 2026 10:57:40 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37162 – Shopify Inventory Sync</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Shopify Inventory Sync&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37162</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37162</guid></item>
<item><pubDate>Wed, 29 Jul 2026 16:30:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37159 – Nightly partner identity integrity monitor (7 violation classes over fofo_store/user.user/user_accounts/user_role ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Nightly partner identity integrity monitor (7 violation classes over fofo_store/user.user/user_accounts/user_role incl. same-GST/mobile multi-open-store mandate checks); scheduled 07:00 + CLI trigger partnerIdentityIntegrityMonitor&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/scheduled/PartnerIdentityIntegrityMonitor.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37159</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37159</guid></item>
<item><pubDate>Tue, 14 Jul 2026 13:49:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37083 – Wire noon price-drop cron to per-drop batch (PriceDropBatchService)  @Scheduled(&quot;0 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Wire noon price-drop cron to per-drop batch (PriceDropBatchService)&lt;br /&gt;
&lt;br /&gt;
@Scheduled(&quot;0 0 12&quot;) now delegates to&lt;br /&gt;
BatchScheduledTasks.reprocessPriceDropsWithBatch() -&gt; PriceDropBatchService,&lt;br /&gt;
so each price drop commits in its own REQUIRES_NEW transaction instead of one&lt;br /&gt;
~20-min transaction holding user_wallet locks and timing out live&lt;br /&gt;
wallet/order/scan traffic at noon.&lt;br /&gt;
&lt;br /&gt;
Requires profitmandi-dao PriceDropBatchService / PriceDropProcessingHelper.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/BatchScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=37083</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37083</guid></item>
<item><pubDate>Thu, 09 Jul 2026 13:15:44 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37040 – on billing delay partner map to focus and revival</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;on billing delay partner map to focus and revival&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=37040</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=37040</guid></item>
<item><pubDate>Thu, 02 Jul 2026 13:15:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36993 – Thread dryRun through sendCreditNote; --sendCreditNote defaults to dry-run (--live for ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Thread dryRun through sendCreditNote; --sendCreditNote defaults to dry-run (--live for real); add 06:00-on-1st monthlyMarginsCnDryRun scheduled job&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=36993</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36993</guid></item>
<item><pubDate>Fri, 15 May 2026 19:25:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36552 – changeList</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;changeList&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36552</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36552</guid></item>
<item><pubDate>Sun, 10 May 2026 16:20:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36511 – Add daily inventory snapshot reconciliation cron - syncs currentinventorysnapshot with ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add daily inventory snapshot reconciliation cron - syncs currentinventorysnapshot with scan truth for active tag_listing items - emails drift report via googleMailSender to sdtech - runs daily at 5:30 AM, CLI trigger: --reconcileInventorySnapshot&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/WarehouseStockReconciliation.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%2FScheduledSkeleton.java&amp;rev=36511</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36511</guid></item>
<item><pubDate>Wed, 22 Apr 2026 19:39:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36361 – Switch @Scheduled updatePartnerLimit to batch-tracked version. Was calling legacy scheduledTasks.updatePartnerLimit ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Switch @Scheduled updatePartnerLimit to batch-tracked version. Was calling legacy scheduledTasks.updatePartnerLimit (one synchronized tx, writes to all ~1500 partners each run, no audit). Now calls batchScheduledTasks.updatePartnerLimitWithBatch (writes only changed partners in per-partner REQUIRES_NEW, records each run in cron_batch / cron_batch_item, sends failure email on partial failures). Same cadence (every 20 min), same business logic. Runs are now visible in /admin/cron-batches UI.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36361</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36361</guid></item>
<item><pubDate>Fri, 17 Apr 2026 13:17:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36292 – Reduce DB scan pressure from runaway IMEI and IRN crons ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Reduce DB scan pressure from runaway IMEI and IRN crons&lt;br /&gt;
&lt;br /&gt;
- IRN cron (updateIrnsToInvoices): fixedDelay 2s -&gt; 5s; migration cron&lt;br /&gt;
  has finished but keeps full-scanning 821k orders every 2s for 0 rows&lt;br /&gt;
  (every billed order already has irnGenerated populated true/false).&lt;br /&gt;
- IMEI activation crons: fixedDelay 60s -&gt; 5min across all 6 methods&lt;br /&gt;
  (vivoImeiActivation, vivoImeiActivationTertiary, oppo, oppoTertiary,&lt;br /&gt;
  realme, realmeTertiary). Each was scanning orders since 2021-01-01&lt;br /&gt;
  every minute; 5min is well within activation-latency tolerance.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36292</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36292</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%2FScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36253</guid></item>
<item><pubDate>Tue, 31 Mar 2026 16:42:28 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36113 – rbm rating consolidate mail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating consolidate mail&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/ScheduledTasksTest.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%2FScheduledSkeleton.java&amp;rev=36113</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36113</guid></item>
<item><pubDate>Wed, 25 Mar 2026 20:13:02 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36065 – Fix:Mail error</title><description>&lt;div&gt;&lt;strong&gt;aman – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Mail error&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OnBoardingRelatedSchelduleTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36065</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36065</guid></item>
<item><pubDate>Wed, 25 Mar 2026 17:17:34 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36058 – web socket done for agent status</title><description>&lt;div&gt;&lt;strong&gt;ranu – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;web socket done for agent status&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/scheduled/b2b/Listing.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/knowlarity/KnowlarityCallMonitorScheduler.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/prod.properties&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/knowlarity/KnowlarityBreakLogService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/knowlarity/KnowlaritySocketTest.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%2FScheduledSkeleton.java&amp;rev=36058</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36058</guid></item>
<item><pubDate>Tue, 17 Mar 2026 12:42:03 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36003 – Fix:Delay report</title><description>&lt;div&gt;&lt;strong&gt;aman – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Delay report&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/scheduled/OnBoardingRelatedSchelduleTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=36003</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=36003</guid></item>
<item><pubDate>Wed, 11 Mar 2026 14:19:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35980 – Removed cron optimized logic for smartdukaan</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Removed cron optimized logic for smartdukaan&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/scratch/GiftRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/scratch/GiftRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.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%2FScheduledSkeleton.java&amp;rev=35980</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35980</guid></item>
<item><pubDate>Wed, 18 Feb 2026 17:44:37 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 35788 – Schedule Shopify Product Sync</title><description>&lt;div&gt;&lt;strong&gt;vikas – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Schedule Shopify Product Sync&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/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/shopify/InsurancePlanFetcher.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/shopify/ShopifyProductMapper.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/shopify/ShopifyProductSyncService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/shopify/ShopifySyncResultModel.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%2FScheduledSkeleton.java&amp;rev=35788</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35788</guid></item>
<item><pubDate>Fri, 06 Feb 2026 15:51:48 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 35666 – Fetch PineLabs Offers Daily by Items</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fetch PineLabs Offers Daily by Items&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/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=35666</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35666</guid></item>
<item><pubDate>Wed, 28 Jan 2026 18:33:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35616 – Fixed delay to 5</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed delay to 5&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=35616</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35616</guid></item>
<item><pubDate>Sat, 17 Jan 2026 12:06:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35568 – Refactor ticket scheduled tasks: fix bugs, add test mode, improve ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Refactor ticket scheduled tasks: fix bugs, add test mode, improve performance&lt;br /&gt;
&lt;br /&gt;
Bug fixes:&lt;br /&gt;
- Remove break statement in alertforTicket that stopped after first user&lt;br /&gt;
- Remove duplicate ticketClosed() method (used 7 calendar days vs 8 working days)&lt;br /&gt;
- Update Application.java CLI handler to use refactored escalateTicket()&lt;br /&gt;
&lt;br /&gt;
New features:&lt;br /&gt;
- Add email test mode: redirect all emails to tester via config&lt;br /&gt;
  - ticket.email.testMode.enabled=true/false&lt;br /&gt;
  - ticket.email.testMode.recipient=&lt;a href=&quot;mailto:tester@email.com&quot;&gt;tester@email.com&lt;/a&gt;&lt;br /&gt;
- Add configurable auto-escalation: ticket.autoEscalation.enabled&lt;br /&gt;
- Working days calculation using WorkingDaysService (excludes Sun + holidays)&lt;br /&gt;
&lt;br /&gt;
Performance improvements:&lt;br /&gt;
- Batch fetch ticketSubCategoryMap once per job, not per email&lt;br /&gt;
- All repository calls moved outside loops (N+1 query fix)&lt;br /&gt;
&lt;br /&gt;
Escalation thresholds updated:&lt;br /&gt;
- L1 -&gt; L2: 3 working days&lt;br /&gt;
- L2 -&gt; L3: 3 working days  &lt;br /&gt;
- L3 -&gt; Final: 2 working days&lt;br /&gt;
&lt;br /&gt;
Co-Authored-By: Claude Opus 4.5 &amp;lt;&lt;a href=&quot;mailto:noreply@anthropic.com&quot;&gt;noreply@anthropic.com&lt;/a&gt;&gt;&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/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/TicketRelatedScheduledTask.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%2FScheduledSkeleton.java&amp;rev=35568</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35568</guid></item>
<item><pubDate>Tue, 06 Jan 2026 16:51:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35522 – Added migration for 2 parties for gold</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added migration for 2 parties for gold&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=35522</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35522</guid></item>
<item><pubDate>Wed, 26 Nov 2025 18:41:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35326 – Fixed Schedule Tasks</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed Schedule Tasks&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/ScheduledTasks.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%2FScheduledSkeleton.java&amp;rev=35326</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35326</guid></item>
<item><pubDate>Sun, 12 Oct 2025 18:59:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35178 – Added SD Credit Scheduler</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added SD Credit Scheduler&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=35178</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35178</guid></item>
<item><pubDate>Sun, 12 Oct 2025 18:55:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35177 – Added SD Credit Scheduler</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added SD Credit Scheduler&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/ScheduledTasks.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/scheduled&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/scheduled/SDCreditScheduler.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%2FScheduledSkeleton.java&amp;rev=35177</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35177</guid></item>
<item><pubDate>Mon, 06 Oct 2025 19:46:47 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 35133 – due date cross added all active loan and change title ...</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;due date cross added all active loan and change title this mail&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.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%2FScheduledSkeleton.java&amp;rev=35133</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-cron%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsmartdukaan%2Fcron%2Fscheduled%2FScheduledSkeleton.java&amp;rev=35133</guid></item>
</channel></rss>