|
9454
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
// $reports = collect([AutomatedReport::find(68)]);
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9454
|
|
9455
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
PhpStormFileEditFV ravsco.isViewNavigateCodeLaravelRefactorToolsWindow#11894 on.lY-18909-automated-renorts-ask-ITHelpProject vC .circleci0 .cursorCa -githubsonarint> D.vscode> D .windsurfv Dapp> M Actions› _ Component> D Configuration• Console• Commands• ActivitiesD AnalyticsD CalendarsJ crmDeallnsichts1 IDe• DialersD DTOS_ Elasticsearch• EngagementStats•J GeckoExportC Livestream• Mailboxes• MigratePlaybackThemesD PlaybooksPlaylistsPostmarkProphetAiReports(C) AutomatedReportsC© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php©Usage.phpM SlackM TeamsD TracksD TranscriptionD TwilioO UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesC© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsCommand.php xAulomaleakeporskeposilory.onoAutomatedReportsService.php© CreateHeldActivityEvent.phpTrackProviderInstalledEvent.phpCreateActivityLoggedEvent.phpUserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandpublic function handle): int86101102103104105106107108// Check if the current month is a quarterly month (January, April, July, October)$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10],stlct crue)$this->logger->info(self::LOG_PREFIX'isMonday' => $isMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterlyMonth' => $isQuarterlyMonth,Checking conditions', I1);// Process daily reportsnunus->orocessredors trecuency. Aurolid ecreoortsseruce..rrcuucMey DAlLYor// Process weekly reports on Mondaysif ($isMonday) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) €$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterlyMonth) {$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_QUARTERLY);$this->logger->info(self::LOG_PREFIX . ' Completed');return 0;xrrocess reooris ror a soectre tredvencu.* Oparam string $frequency* Oreturn voidprivate function processReports(string $frequency): void$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");ver au endoleo, nor ccrereo reoorsValeniacave tealistomune specuneo treoue$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);$reports = collect([AutomatedReport: : find(68)]);{ Support Daily • in 4 h 21mARequestGenerateAskJiminnyReportJobTest v100%Tue 14 Apr 10:39:25= custom.logA console [STAGING]<?php= laravel.logA SF [jiminny@localhost]© AskJiminnyReportActivityService.phpA HS_local [jiminny@localhost]Al console [PROD]© RequestGenerateAskJiminnyReportJobTest.php xA console (EU]CascadeNew CascadeA1 A14 X4 Aoecare stmer voes=.namespace Tests\Unit\Jobs\AutomatedReports;› use ..21 Pclass RequestGenerateAskJiminnyReportJobTest extends TestCase2728 đ* >737438 usages18 usages14 usages24 usaoesprivate Automatedreportsservicexlockubject sreporcservice:onvate AskurinonyreoortAcaiu tvoeru cecrockupecr sactultvoerurcerorivate rrocneuuulentxmockubect soroonetullencprivate LoggerInterface&Mock0bject $logger;protected function setUp(): voidf...}13 usagesprivate function makeJob(string $uvid = 'report-uvid'): RequestGenerateAskJiminnyReportJob{..}11 usagesprivate function makeActiveReport(string $type = AutomatedReportsService::TYPE_ASK_JIMINNY,bool $status = true,string $teamStatus = Team::STATUS_ACTIVE,): AutomatedReport&Mock0bject {...}public function testUniqueIdReturnsReportUuid(): voidf...public function testHandleSkipsWhenReportTypeIsNotAskJiminnx(): void$report = $this->makeActiveReport(type: 'exec_summary');$this->reportService->expects($this->once())->method ( constraint: 'getReport')->willReturn($report);$this->logger->expects($this->once())->methodll constraint'info')->with($this->stringContains( string: 'Started'));$this->logger->expects($this->once))->neunod constra'warning')-›with($this->stringContains(string: 'not an ask-liminny report'));$this->reportService->expects($this->never())->method( constraint: 'createReportResult');+0 •WCascade Code*•.Kick off a new project. Make changesduross youl entle codebase$job = $this->makeJob();$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger) ;|Automarea kepons code kevlew rixesC Fixing ReportController Tests© Ask Jiminny Payload Refinement86 %public function testHandleSkipsWhenReportIsInactive(): voidAsk anything (X4L)$report = $this->makeActiveReport(status: false);+ <> Code Claude Sonnet 4.6Winasun leams29:461/ charsUTF-8( 4 spaces...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9455
|
|
9456
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp• 0DOCKER-rw-r--r--• 881DEV (-zsh)882APP (-zsh)83-zsh1lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g95425-rw-r--r--1lukasstaff11 Apr 23:14 screenpipe.2026-04-11.0.10g72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status{"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*la6lSupport Daily - in 4h 21 m100% <47-zsh₴4-zsh-zsh886-zshO ₴7Tue 14 Apr 10:39:27T81* Unable to acce...O 88...
|
NULL
|
NULL
|
NULL
|
9456
|
|
9457
|
PhpStormFileEditFV faVsco.s vViewNavigateCodeLarav PhpStormFileEditFV faVsco.s vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-jiminny k vToolsWindowHelpProject vC .circleci0 .cursorCa -githubsonarint> D.vscode> D .windsurfv Dapp> M Actions› _ Component> D Configuration• Console• Commands• ActivitiesD AnalyticsD CalendarsJ crmDeallnsichts1 IDe• DialersD DTOS_ Elasticsearch• EngagementStats•J GeckoExportLivestream• Mailboxes• MigratePlaybackThemesD PlaybooksPlaylistsPostmarkProphetAiD Reports(C) AutomatedReportsC© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php©Usage.phpM SlackM TeamsD TracksD TranscriptionD TwilioO UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesC© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© ReportController.php© AutomatedReportsCommand.php x© CreateHeldActivityEvent.phpUserPilotActivityListener.php© RequestGenerateAskJiminnyReportJob.phpJiminnybeouecommana.ong© AutomatedReportsSendCommand.phpAulomaleakeporskeposilory.onoAutomatedReportsService.phpTrackProviderInstalledEvent.php© ActivityLogged.phpCreateActivityLoggedEvent.php© AutomatedReportsCallbackService.phpC AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandpublic function handle): int86101102103104105106107108// Check if the current month is a quarterly month (January, April, July, October)$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10],stlct crue)$this->logger->info(self::LOG_PREFIX'isMonday' => $isMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterlyMonth' => $isQuarterlyMonth,Checking conditions', I1);// Process daily reportsnunus->orocessredors trecuency. Aurolid ecreoortsseruce..rrcuucMey DAlLYor// Process weekly reports on Mondaysif ($isMonday) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) €puhis->processkeporus trequency: AUcomacedkeportsservice::FREQUENCY_MUNTHLY)H// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterlyMonth) {$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_QUARTERLY);$this->logger→>info(self::LOG_PREFIX . ' Completed');return 0;xrrocess reoorrs ror o soecire tredvencu.* Oparam string $frequency* Oreturn voidprivate function processReports(string $frequency): void$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");ver au endoleo, nor ccrereo reoortsValeniacuve reais ror tne soectriee treque$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);$reports = collect([AutomatedReport: : find(68)]);Windsurf changelog 2.12.21: A new version is available. // View Changelog (6 minutes ago){ Support Daily - in 4 h 21 mA• RequestGenerateAskJiminnyReportJobTest v100%Tue 14 Apr 10:39:28= custom.logA console [STAGING]<?php= laravel.logA SF [jiminny@localhost]© AskJiminnyReportActivityService.phpA HS_local [jiminny@localhost]Al console [PROD]© RequestGenerateAskJiminnyReportJobTest.php xA console (EU]CascadeNew CascadeA1 A14 X4 Aoecare suncr voes-unamespace Tests\Unit\Jobs\AutomatedReports;› use ..21 Pclass RequestGenerateAskJiminnyReportJobTest extends TestCase2728 6t >64%737438 usages18 usages14 usages24 usaoesprivate Automatedreporusservicexmockudject sreportservice,onvate AskurinonyreoortAcaiu tvoeru cecrockupecr sactultvoerurcerorivate rrocneuuulentxmockubect soroonetullencprivate LoggerInterface&Mock0bject $logger;protected function setUp(): voidf...}13 usagesprivate function makeJob(string $uvid = 'report-uuid'): RequestGenerateAskJiminnyReportJob{...}11 usagesprivate function makeActiveReport(string $type = AutomatedReportsService::TYPE_ASK_JIMINNY,bool $status = true,string $teamStatus = Team::STATUS_ACTIVE,): AutomatedReport&Mock0bject {...}public function testUniqueIdReturnsReportUuid(): voidf...public function testHandleSkipsWhenReportTypeIsNotAskJiminnx(): voidSreport = Sthis->makeActiveReport(type:'exec_summary'?$this->reportService->expects($this->once())->method ( constraint: 'getReport')->willReturn($report);$this->logger->expects($this->once())->methodll constraint'info')->with($this->stringContains( string: 'Started'));$this->logger->expects($this->once))->necno constraind'warning')-wichlechis-escringcontainst sting. not an ask-amnay report?$this->reportService->expects($this->never())->method( constraint: 'createReportResult');+0 .CascadeWCascade Code*•.Kick off a new project. Make changesduross youl entle codebase$job = $this->makeJob();$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger) ;|Automarea kepons code kevlew rixesC Fixing ReportController Tests© Ask Jiminny Payload Refinement86 %public function testHandleSkipsWhenReportIsInactive(): voidAsk anything (X4L)$report = $this->makeActiveReport(status: false);+ <> Code Claude Sonnet 4.6W Winasunt leams29:461/ charsuir-o( 4 spaces...
|
NULL
|
NULL
|
NULL
|
9457
|
|
9458
|
PhpStormFileEoitViewNavigateCodeLaravelRetactonToo PhpStormFileEoitViewNavigateCodeLaravelRetactonToolsWindowHelpFV faVsco.js v#11894 on JY-18909-automated-reports-ask-iminny K vProject v.circleciJ.cursorLo -githubsonarint>M.vscode> M.windsurfv Mapp> M Actions> _ Component> _ ConfigurationConsoleCommands_ Activities_ Analyticscalendarsu crmDeallnsichts1 IDeM DialersD DTOS_ Elasticsearch_ EngagementStatsD GeckoExportLivestream_ MailboxesMigrate_ Playback IhemesPlavbooksPlav istsPostmark• ProphetAiReports(C) AutomatedReportsC(C) AutomatedReportsR(C) AutomatedReportsSc Croate Mockack.limirc) DeleteRenortcomma© GenerateMarketingk© Team.php© Usage.phpM SlackM TeamsD Tracks_ Transcription_ TwilioD Users_ Vocabulary_ Zoom© CoachingFeedbacksUpg command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesCC DeleteS3LeftoversCom(C DevPostmanCommand.(©) DiarizeViaAiParticipantlC EncryptTokensComman(©) EngagementStatsRegenT FeatureFlagsHelper.phpc) ReportController.onpJiminnybeouecommana.ongc) AutomatedReporssenccommane.ono(©) AutomatedReportsCommand.php xAulomaleakeporskeposilory.oneAulomaleakeporisservice.onp© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© CreateActivityLoggedevent.php© ActivityLogged.php© AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpC) AutomatedReportResult.phpC) AutomatedReport.php79979810011011021031041051 el6111081110class AutomatedReportsCommand extends Commandpublic function handle():intveurtehcnonele onon chonelr// Check if the current month is a quarterly month (January, April, July, October)pisquarcerlynonch = In_arraylscurrenchonch, lt, 4, 7, 10J.strict: true),nuns-oloccereoiiro seut.aLud racri.'Checking conditions'. I'isMonday' => s1sMonday,'isFirstDay0fMonth' => SisFirstDay0fMonth,'currentMonth' => ScurrentMonth,'isQuarterlyMonth' => SisQuarterlyMonth.D);/ Process danly reportssthis->processReports( trequency: AutomatedReportsservice::FREQUENCY_DALLY):// Process weekly reporus on Mondaysif ($isMonday) 1Sthis->processReports( frequency: AutomatedReportsService::FREOUENCY WEEKLY):Process monthly reports on the first day of the monthif (SisFirstDay0fMonth)sth1s->processReports trequency: AutomatedReportsservice::FREQUENCY_MONTHLYJ*// Process quarterly reports on the tirst day of January, April, July, and uccoderif ($isFirstDay0fMonth && $isQuarterlyMonth) {nunus-›orocesskeoorts, trequency: Auronaredreporusserv.ce..rrcUU-NCY UUARICKLY)?sthis->loqger->info(self::L0G_PREFIX.'Completed'):return 0:* Process reports for a specific frequency* @param string $frequency* dreturn void4 usagesprivate function processReports(string sfrequency): voidsthis->Logger->1nfo(self::LOG_PREFIX • " Processing strequency reports"):// Get all enabled, not deleted reports with active teams for the specifled frequencyфreports = schis->reрoгикeрos1tory->gecAculveкeportsbyrrequencyprrequency)iфreports = coLLect(LAutomacedкeрort: :r1nd(60)1);$this->logger->info(self::LOG_PREFIX . " Found ($reports->countO} $frequency reports to process") :** @var AutomatedReport Sreport *Windsurf changelog 2.12.21: A new version is available. // View Changelog (6 minutes ago)= custom.log= laravel.logc SF liminny@localhost« HS_local fiminny@localhost© AskJiminnyReportActivityService.phpC RequestGenerateAskJiminnyReportJobTest.php x<.onDnecare sumcr voes=urnamespace Tests Unit Jobs AutomatedReports:› use ...21Mclass RequestGenerateAskJ1minnyReportJoblest extends Testcase280>57 M648808138 usagesprivace Aucomacedkeporusservicexmockubject preportservice,18 usagesonvate AskuriunnyredorAcrmtyseru cexrockudecr sacultvoerurcer14 usagesprivate ProphetClient&Mock0bject $prophetClient:44 usaoesprivate LoqgerInterface&Mock0bject Slogger:protected function setUp(): void{...}13 usagesprivate function makeJob(string $uvid = 'report-uvid'): RequestGenerateAskJiminnyReportJob{...}Il usagesprivate function makeActiveReportstring Stype = AutomatedReportsService::TYPE_ASK_JIMINNY.bool $status = true.string SteamStatus = Team::STATUS ACTIVE.): AutomatedReport&Mock0bject {...}public function testUniqueldReturnsreportuu1do: vo1di...pubLic tunccion ceschandLesk1pswnenkeportlypelsnotAskyLminny: vo1dфrерогт = schis->mакеасиvекерогс(сурe: "exec_summary"):$this->reportService->expects($this->onceO->method co.->willReturn(Sreport) :sthis->Logger->expects(sthis->once))=>mathodll cons'info')->w1th(sth1s->stringContalns( string: 'Started')):nanu s=>lodder-exdecisnus-soncerui->iecno conswarnund"y->with($this->stringContains( string: 'not an ask_jiminny report')):sthis->reportService->expects($this->neverO)->method constraint: 'createReportResult')$7ob = Sthis->makeJobO:$70b->handle(sthis->reportservice, sthis-›activityservice, sth1s->prophetclient, sthis->logger)*86%0pubLic tuncclon ceschandLeskipswnenkeportistnaculve: vold88nrevort = "uhus->nakeAcuvereoort status. tauseu.aSupport Daily • in 4 h 21 mA100% [8Tue 14 Apr 10:39:29U RequestGenerateAskJiminnyReportJobTest ve console (PROD]L console (EU]c console (STAGING)01 A14 У.4 лW Winasunt leams29:461/ charsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
9458
|
|
9459
|
0,12%
Processes:
Idle:
76,51%
23,37%
User:
System: 0,12%
Processes:
Idle:
76,51%
23,37%
User:
System:
4 338
470
CPU LOAD
Threads:
PhpStorm
459,1
24:09,44
250
343
Apple
4,9
5,14
47938
lukas
kernel_task
94,1
3:56:11,69
532
5718
Apple
0,0
0,00
0
root
screenpipe
93,3
15:53,18
58
76
Apple
0,0
0,00
24377
lukas
WindowServer
30,3
5:06:03,86
23
310
Apple
24,2
39:07,96
407
_windowserver
Virtual Machine Service for Docker
21,3
13:36,15
20
360
Apple
0,0
0,00
35117
lukas
replayd
11,1
41:15,84
11
1
Apple
0,0
0,00
767
lukas
Activity Monitor
6,5
29:24,94
9
5
Apple
0,0
0,00
17101
lukas
launchservicesd
6,2
17:32,21
5
0
Apple
0,0
0,00
380
root
Claude
6,1
36:11,84
65
32
Apple
0,0
0,02
2501
lukas
Notion
3,3
5:08,04
45
1
Apple
0,0
0,00
843
lukas
language_server_macos_arm
3,3
22,96
14
1430
Apple
0,0
0,00
48898
lukas
Wispr Flow Helper (Renderer)
3,3
41:23,99
17
31
Apple
0,0
0,00
3834
lukas
Virtual Machine Service for Claude
3,1
17:21,11
19
32
Apple
0,0
0,00
53868
lukas
Wispr Flow Helper (Renderer)
3,0
33:50,07
23
132
Apple
0,0
0,00
3837
lukas
Wispr Flow
3,0
27:25,02
16
212
Apple
0,0
0,00
3833
lukas
Bitwarden
2,7
23,98
45
1
Apple
0,0
0,00
26050
lukas
Karabiner-Core-Service
2,7
22:11,16
14
115
Apple
0,0
0,00
529
root
iTerm2
2,1
47:29,21
7
16
Apple
0,9
7,95
4878
lukas
Wispr Flow Helper (GPU)
1,6
18:50,68
18
65
Apple
0,1
4,47
3813
lukas
org.pqrs.Karabiner-DriverKit-VirtualHIDDevice
1,5
10:25,05
3
0
Apple
0,0
0,00
600
_driverkit
Karabiner-VirtualHIDDevice-Daemon
1,4
13:33,35
7
7
Apple
0,0
0,00
530
root
Docker
1,4
25,99
265
389
Apple
0,0
0,00
34527
lukas
bluetoothd
1,3
14:18,27...
|
Activity Monitor
|
Activity Monitor – All Processes
|
NULL
|
9459
|
|
9460
|
0,12%
Processes:
Idle:
89,56%
10,32%
User:
System: 0,12%
Processes:
Idle:
89,56%
10,32%
User:
System:
4 292
470
CPU LOAD
Threads:
PhpStorm
564,8
24:39,24
249
162
Apple
2,3
5,14
47938
lukas
kernel_task
77,4
3:56:15,78
532
4913
Apple
0,0
0,00
0
root
screenpipe
22,4
15:54,36
52
92
Apple
0,0
0,00
24377
lukas
WindowServer
20,4
5:06:04,94
22
199
Apple
10,7
39:08,08
407
_windowserver
Virtual Machine Service for Docker
17,1
13:37,05
19
349
Apple
0,0
0,00
35117
lukas
replayd
10,0
41:16,37
11
0
Apple
0,0
0,00
767
lukas
Activity Monitor
8,4
29:25,39
9
6
Apple
0,0
0,00
17101
lukas
Firefox
7,3
9:06,39
65
18
Apple
0,0
0,01
8014
lukas
launchservicesd
6,2
17:32,54
3
0
Apple
0,0
0,00
380
root
language_server_macos_arm
3,6...
|
Activity Monitor
|
Activity Monitor – All Processes
|
NULL
|
9460
|
|
9461
|
0,12%
Processes:
Idle:
89,56%
10,32%
User:
System: 0,12%
Processes:
Idle:
89,56%
10,32%
User:
System:
4 292
470
CPU LOAD
Threads:
PhpStorm
564,8
24:39,24
249
162
Apple
2,3
5,14
47938
lukas
kernel_task
77,4
3:56:15,78
532
4913
Apple
0,0
0,00
0
root
screenpipe
22,4
15:54,36
52
92
Apple
0,0
0,00
24377
lukas
WindowServer
20,4
5:06:04,94
22
199
Apple
10,7
39:08,08
407
_windowserver
Virtual Machine Service for Docker
17,1
13:37,05
19
349
Apple
0,0
0,00
35117
lukas
replayd
10,0
41:16,37
11
0
Apple
0,0
0,00
767
lukas
Activity Monitor
8,4
29:25,39
9
6
Apple
0,0
0,00
17101
lukas
Firefox
7,3
9:06,39
65
18
Apple
0,0
0,01
8014
lukas
launchservicesd
6,2
17:32,54
3
0
Apple
0,0
0,00
380
root
language_server_macos_arm
3,6
23,15
14
1836
Apple
0,0
0,00
48898
lukas
Claude
3,5
36:12,03
65
19
Apple
0,0
0,02
2501
lukas
Wispr Flow Helper (Renderer)
3,3
41:24,17
17
33
Apple
0,0
0,00
3834
lukas
mds_stores
3,0
26:40,01
5
3
Apple
0,0
0,00
580
root
Wispr Flow Helper (Renderer)
2,9
33:50,23...
|
Activity Monitor
|
Activity Monitor – All Processes
|
NULL
|
9461
|
|
9462
|
Activity MonitorFV ravsco.isFileFoltViewWindowHelr Activity MonitorFV ravsco.isFileFoltViewWindowHelrProject vC .circleci0 .cursorCa-githubDJ.sonarlint> D.vscode> D .windsurfv Dapp> DJ Actions> _ Component> D Configuration• ConsoleD Commands• ActivitiesD AnalyticsD CalendarsD CrmDeallnsichts1 IDe• DialersDDTOS_ Elasticsearch• EngagementStats•J GeckoExportC Livestream• Mailboxes• MigratePlaybackThemesD PlaybooksPlav istsPostmarkProphetAiReports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php©Usage.phpM SlackM TeamsD TracksD TranscriptionD TwilioO UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesC© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsSendCommand.phpAulomaleakeporskeposilory.oneAulomaleakeporisservice.onoCreateHeldActivityEvent.phpAutomatedReportsCommand.php x© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandpublic function handle():intveurtehcnonele onon chonelr799798100110110210310410510610711081110// Check if the current month is a quarterly month (January, April, July, October)$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10],strict: true);nuns-oloccereounro seutaLuo racria''Checkina conditions'.'isMonday' => s1sMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterlyMonth' => $isQuarterlyMonth,D);// Process daily reports$this->processReports( frequency: AutomatedReportsService::FREQUENCY_DAILY);// Process weekly reports on Mondaysif ($isMonday) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterZyMonth) {nunus-›orocesskeoorts, trequency: Auronaredreporusserv.ce..rrcUU-NCY UUARICKLY)?$this->logger->info(self::LOG_PREFIX'Completed');return 0;* Process reports for a specific frequency.* Oparam string $frequency* Oreturn void4 usagesprivate function processReports(string $frequency): void$this->logger→>info(self::LOG_PREFIX . " Processing $frequency reports");// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);$reports = collect([AutomatedReport: : find(68)1);$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");/** @var AutomatedReport $report */Activity MonitorAll ProcessesProcess NamePhostormVirtual Machine Service for DockerVintual Machine service tor claudeFirefoxCP Isolated Web ContentClaude Helper (Rendererlanguage_server_macos.armavaFirefoxslack melper kendererFirefox GPU Helper• FirefoxFirefox GPU HelperNotion Calendar Helper (Renderer)Notion Helper (Renderer)• FirefoxCP Isolated Web ContentFirefoxCP Isolated Web Contentrireroxer isolated wed contentclaudeClaudeFirefoxCP Isolated Web ContentFiretoxeP solated Weo contentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web Contentcer server melper (kendererDockerireroxer webexiensionsClaude HelperKaycastwispr Flow Helper (GPU)Bitwarden Helper (Renderer)A Wispr FlowWispr Flow Helper (Renderer)screenpipeFinderNotion CalendarNotion Helper (GPU)Activily monitorSlack HelperFirefoxCP Isolated Web Contentcet server Helper (GPU)CleanShot XNotion Helper (Renderer)wisor riow melper kenderer{ Support Daily - in 4 h 21 mA100% C•Tue 14 Apr 10:39:39NetworkQ SearchMem..4,36 GB4,00 GB1,86 GB828,3 MB819,3 MB708,2 MB697,1 MB00/4 MB545,2 MB524,1 MB520 8 MB484,9 MB444,7 MB416,1 MBS9S7 M3359,2 MB326,4 MB312,3 MB300,6 MB299,1 MB251,1 MB237,8 MB233,5 MB231. M3227,7 MB16/.8 MB167,4 MB161,0 MB152,9 MB147,8 MB141,7 MB140,1 MB138.4 M3136,4 MB1349 M3132,3 MB121,8 MB113,8 MB112,8 MB102,3 MB100,4 MB97,6 MB95,9 MB92,1 MB92,1 MB89,5 MB88,0 MB86,8 MB82,4 MB75,5 MB73 8 MBThreads249265MEMORY PRESSURECPUMerporytheroyPorts9071121421720065822774521617433612110 1531241171 23482111712214711972211819954222241835405584985407385491864431891186114041601365Disk47938351175386840714700251748898484008014242731467314664801926548114828931842147913687750910487825013224928246278002653433366489473452780432511388423813260683800383724377743242462653184386117101242704574648935835260501822383435110UserlukaslukaslukaswindowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukasukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukasPhysical Memory:Memory Used:Swap Used:16,00 GB14,04 GB<19G34,76 GBApp Memory:Wired Memory:Comoressec:4,38 GB2,07 GB7,05 CB...
|
NULL
|
NULL
|
NULL
|
9462
|
|
9463
|
Physical Memory:
16,00 GB
Memory Used:
14,04 GB
Ca Physical Memory:
16,00 GB
Memory Used:
14,04 GB
Cached Files:
1,91 GB
Swap Used:
4,75 GB
4,27 GB
Wired Memory:
Compressed:
2,15 GB
7,06 GB
App Memory:
MEMORY PRESSURE
PhpStorm
4,36 GB
[PHONE]8
lukas
Virtual Machine Service for Docker
4,00 GB
20
83
35117
lukas
Virtual Machine Service for Claude
1,86 GB
20
79
53868
lukas
WindowServer
831,6 MB
21
11 211
407
_windowserver
FirefoxCP Isolated Web Content
819,3 MB
23
121
14700
lukas
Claude Helper (Renderer)
708,2 MB
15
217
2517
lukas
language_server_macos_arm
697,1 MB
14
64
48898
lukas
java
557,4 MB
57
208
48458
lukas
Firefox
545,3 MB
65
658
8014
lukas
Slack Helper (Renderer)
524,1 MB
15
164
24273
lukas
Firefox GPU Helper
520,8 MB
26
226
14673
lukas...
|
Activity Monitor
|
Activity Monitor – All Processes
|
NULL
|
9463
|
|
9464
|
Activity MonitorFV ravsco.isFileFoltViewWindowHelr Activity MonitorFV ravsco.isFileFoltViewWindowHelrProject vC .circleci0 .cursorCa-githubDJ.sonarlint> D.vscode> D .windsurfv Dapp> M Actions> _ Component> D Configuration• ConsoleD Commands• ActivitiesD AnalyticsD CalendarsD CrmDeallnsichts1 IDe• DialersDDTOS_ Elasticsearch• EngagementStats•J GeckoExportC Livestream• MailboxesMigratePlaybackThemesD PlaybooksPlav istsPostmarkProphetAiReports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php©Usage.phpM SlackM TeamsD TracksD TranscriptionD TwilioO UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesC© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsSendCommand.phpAulomaleakeporskeposilory.oneAulomaleakeporisservice.onoCreateHeldActivityEvent.phpAutomatedReportsCommand.php x© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandpublic function handle():intveurtehcnonele onon chonelr799798100110110210310410510610711081110// Check if the current month is a quarterly month (January, April, July, October)$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10],strict: true);nuns-oloccereounro seutaLuo racria''Checkina conditions'.'isMonday' => s1sMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterlyMonth' => $isQuarterlyMonth,D);// Process daily reports$this->processReports( frequency: AutomatedReportsService::FREQUENCY_DAILY);// Process weekly reports on Mondaysif ($isMonday) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterZyMonth) {nunus-›orocesskeoorts, trequency: Auronaredreporusserv.ce..rrcUU-NCY UUARICKLY)?$this->logger->info(self::LOG_PREFIX'Completed');return 0;* Process reports for a specific frequency.* Oparam string $frequency* Oreturn void4 usagesprivate function processReports(string $frequency): void$this->logger→>info(self::LOG_PREFIX . " Processing $frequency reports");// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);$reports = collect([AutomatedReport: : find(68)1);$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");/** @var AutomatedReport $report */Activity MonitorAll ProcessesProcess NamePhostormVirtual Machine Service for DockerVintual Machine service tor claudeFirefoxCP Isolated Web ContentClaude Helper (Rendererlanguage_server_macos.armavaFirefoxslack melper kendererFirefox GPU Helper• FirefoxFirefox GPU HelperNotion Calendar Helper (Renderer)Notion Helper (Renderer)• FirefoxCP Isolated Web ContentFirefoxCP Isolated Web Contentrireroxer isolated wed contentclaudeClaudeFirefoxCP Isolated Web ContentFiretoxeP solated Weo contentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web Contentcer server melper (kendererDockerireroxer webexiensionsClaude HelperKaycastwispr Flow Helper (GPU)Bitwarden Helper (Renderer)A Wispr FlowWispr Flow Helper (Renderer)screenpipeFinderNotion CalendarNotion Helper (GPU)Activily monitorSlack HelperFirefoxCP Isolated Web Contentcet server Helper (GPU)CleanShot XNotion Helper (Renderer)wisor riow melper kendererMem..4,36 GB4,00 GB1,86 GB828,3 MB819,3 MB708,2 MB697,1 MB00/4 MB545,2 MB524,1 MB520 8 MB484,9 MB444,7 MB416,1 MBS9S7 M3359,2 MB326,4 MB312,3 MB300,6 MB299,1 MB251,1 MB237,8 MB233,5 MB231. M3227,7 MB16/.8 MB167,4 MB161,0 MB152,9 MB147,8 MB141,7 MB140,1 MB138.4 M3136,4 MB1349 M3132,3 MB121,8 MB113,8 MB112,8 MB102,3 MB100,4 MB97,6 MB95,9 MB92,1 MB92,1 MB89,5 MB88,0 MB86,8 MB82,4 MB75,5 MB73 8 MBThreads249265Ports90711 21421720065822774521617433612110 1531241171 23482111712214711972211819954222241835405584985407385491864431891181466114041601365{ Support Daily - in 4 h 21 mA100% C•Tue 14 Apr 10:39:44NetworkQ SearchMemory47938351175386840714700251748898484008014242731467314664801926548114828931842147913687750910487825013224928246278002653433366489473452780432511388423813260683800383724377743242462653184386117101242704574648935835260501822383435110theroyDiskUserlukaslukaslukaswindowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukasukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukasPhysical Memory:Memory usedSwap Used:16,00 GB14,02 GB <19G34,75 GBApp Memory:Wired Memory:Comoressec:4,23 GB2,15 GB7,09 CB...
|
NULL
|
NULL
|
NULL
|
9464
|
|
9465
|
Activity MonitorFileFoltViewWindowHelrFV ravsco.is Activity MonitorFileFoltViewWindowHelrFV ravsco.isProject v.circleciJ.cursorLo -githubsonarint>M.vscode> M.windsurfv Mapp> M Actions> _ Component> _ ConfigurationConsole_ Commands_ Activities_ Analyticscalendarsu crmDeallnsiahts1 IDeM DialersDDTOS_ Elasticsearch_ EngagementStatsD GeckoExportLivestream_ MailboxesMigrate_ Playback IhemesPlavbooksPlav istsPostmarkProphetAiReports(C) AutomatedReportsC(C) AutomatedReportsR(C) AutomatedReportsSc Croate Mockack.limirc) DeleteRenortcomma© GenerateMarketingk© Team.php© Usage.phpM SlackM TeamsD Tracks_ Transcription_ TwilioD Users_ Vocabulary_ Zoom© CoachingFeedbacksUpg command.php© CreateDatabaseusers.p(e) Database aoecount.oi(C) Delete@ldAiCrmNotesCC DeleteS3LeftoversCom(C DevPostmanCommand.(©) DiarizeViaAiParticipantlC EncryptTokensComman(©) EngagementStatsRegenT FeatureFlagsHelper.phpc) ReportController.onpJiminnybeouecommana.ongC AutomatedReportsSendCommand.php(©) AutomatedReportsCommand.php XAulomaleakeporskeposilory.oneAulomaleakeporisservice.ono© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© CreateActivityLoggedevent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpC) AutomatedReportResult.phpC) AutomatedReport.php79979810011011021031041051 el6111081110class AutomatedReportsCommand extends Commandpublic function handle():intveurtehcnonele ononchonenr// Check if the current month is a quarterly month (January, April, July, October)pisquarcerlynonch = In_arrayl,currentrlonch, Ll, 4, 7, 10J.strict: true),nuns->loccereouiro seuteaLuo rcria''Checkina conditions'.'isMonday' => s1sMonday,'isFirstDay0fMonth' => SisFirstDay0fMonth .'currentMonth' => ScurrentMonth,'isQuarterlyMonth' => SisQuarterlyMonth.D);/ Process dally reportssthis->processReports( trequency: AutomatedReportsservice::FREQUENCY_DALLY):// Process weekly reporus on Mondaysif ($isMonday) 1Sthis->processReports@ frequency: AutomatedReportsService::FREOUENCY WEEKLY):Process monthly reports on the first day of the monthif (SisFirstDay0fMonth)sth1s->processReports trequency: AutomatedReportsservice::FREQUENCY_MONTHLYJ*// Process quarterly reports on the tirst day of January, April, July, and uctoderif ($isFirstDay0fMonth && $isQuarterlyMonth) {nunus-›orocesskeoorts, trequency: Auronaredreporusserv.ce..rrcUU-NCY UUARICKLY)?sthis->loqger->info(self::L0G_PREFIX .'Completed'):return 0:* Process reporus for a specific frequency* @param string $frequency* dreturn void4 usagesprivate function processReports(string sfrequency): voidsthis->Logger->1nfo(self::LOG_PREFIX • " Processing strequency reports"):// Get all enabled, not deleted reports with active teams for the specifled frequencyфreports = suhis->reрoгикeрos1сory->geсaculveкeрortsbyrrequencyrrequency):фreports = coLLecc(lAucomacedкeport:: rind(6o)J);$this->logger->info(self::LOG_PREFIX . " Found ($reports->countO} $frequency reports to process") :** @var AutomatedReport Sreport *Activity MonitorAll ProcessesProcess NamePs PhpStormscreenpipekernel_taskVirtual Machine Service for DockerreplaydActivity MonitorlaunchservicesaClaudemas storeslanguage_server_macos_armWisor Flow Helper (Renderer.Wispr Flow Helper (Renderer)oFiretoxNotionNotion Helper (RendererA Wispr FlowKarabiner-core-serviceVirtual Machine Service for ClaudeiTerm2Wispr Flow Helper (GPU)FirefoxDockerFirefoxCP Isolated Web ContentKarabiner-VirtualHIDDevice-Daemonorc.oors.karabiner-DriverkievinualmibDevBTL-Servercontrol centrelogdbluetoothdlauncheNotion Helper (GPU)FirefoxCP Isolated Web ContentsysmonoWispr FlowSlack Helper (Renderer)PerfPowerServicescom.apple.Appleusermibbrivers1o.kandil. KandlAgent.ESr-ExtensionsyspolicydauditdRescueTimeopendirectorydcloudo% CPU584,941.741,715,94,63,02,92,72,31,71,51,31,21,10,90,50,40,3CPU Time25:27,1715:57.033:56:19,105:06:0.0013:38,2741:16,8929:26,4117:32,8736:12,3526:40.4123,4224,3041:24.4133:50,469:06.555:08.3411:39,5227:25,3522:11,4117:21,4247:29,4918:50,885:28,4626,1723,4356,9713:33,4810:25.178:35,7319:52,756:25,2614:18,3711:40.12:37,684162.6951,864:45,9410,2913:03,777122.921:23,671:07.013:05,376:36.925:21,5118,825:00.203:05,363:22,033,110,3SustemUser.• Support Daily • in 4 h 21 mA100% |45]Tue 14 Apr 10:39:46CPUMemorytheroyDiskNetworkQ SearchThreadsIdle Wake-UpsKindi% GPUGpu TimeUserApple5,1447930lukasApple4840Apple0,0386AppleApple0,0AppleApple0,000,0039:08.150,000,000.002437lukas3511776717101lukaslukasApole2458AppleAppleAppleApple0,00,00,00,000,020,000,000,000,0030025010004889826050lukas10OClukasnikasApoleAppleApoleApple3834ukas0,000,010,000,003837lukas8014lukas8431148lukasAppleAppleAppleAppleAppleAppleApplelukas0,00,40,00,0265ApoleAppleAppleAppleApole0,00,0AppleAppleAppleAppleApole0,00,00,00,000,00O.007,964.470,010,000,000,010,000,00O.002,740,000,000.0038335295386848783813MARAAlukas10Otlukaslukas345273687724246530600lukaslukaslukaslukaslukasrootdriverkit5701741rootlukas337400rootrootrootAppleDAO5ApoleAppleAppleAppleApple23.80root0,00,0AppleAppleApple0,0AppleApoleAppleAppleIntell0,0ApoleApoleApple0,00,000,00O.000,00O.000,000.000,000,000,000,000.000,00O.000,005331479135173848689lukasrootlukas10Ot380024270lukasnikas92207507546505root_driverkitrootroot24061834123groot37024lukasThreadsCPU LOAD90 A500,112%42011701...
|
NULL
|
NULL
|
NULL
|
9465
|
|
9466
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
// $reports = collect([AutomatedReport::find(68)]);
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1
14
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Jobs\AutomatedReports;
use Carbon\Carbon;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class RequestGenerateAskJiminnyReportJobTest extends TestCase
{
private AutomatedReportsService&MockObject $reportService;
private AskJiminnyReportActivityService&MockObject $activityService;
private ProphetClient&MockObject $prophetClient;
private LoggerInterface&MockObject $logger;
protected function setUp(): void
{
$this->reportService = $this->createMock(AutomatedReportsService::class);
$this->activityService = $this->createMock(AskJiminnyReportActivityService::class);
$this->prophetClient = $this->createMock(ProphetClient::class);
$this->logger = $this->createMock(LoggerInterface::class);
}
private function makeJob(string $uuid = 'report-uuid'): RequestGenerateAskJiminnyReportJob
{
return new RequestGenerateAskJiminnyReportJob($uuid);
}
private function makeActiveReport(
string $type = AutomatedReportsService::TYPE_ASK_JIMINNY,
bool $status = true,
string $teamStatus = Team::STATUS_ACTIVE,
): AutomatedReport&MockObject { // @phpstan-ignore-line
$team = $this->createMock(Team::class);
$team->method('getStatus')->willReturn($teamStatus);
$report = $this->createMock(AutomatedReport::class);
$report->method('getType')->willReturn($type);
$report->method('getStatus')->willReturn($status);
$report->method('getTeam')->willReturn($team);
return $report;
}
public function testUniqueIdReturnsReportUuid(): void
{
$job = $this->makeJob('my-unique-uuid');
$this->assertEquals('my-unique-uuid', $job->uniqueId());
}
public function testHandleSkipsWhenReportTypeIsNotAskJiminny(): void
{
$report = $this->makeActiveReport(type: 'exec_summary');
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('info')
->with($this->stringContains('Started'));
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('not an ask_jiminny report'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenReportIsInactive(): void
{
$report = $this->makeActiveReport(status: false);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenTeamIsInactive(): void
{
$report = $this->makeActiveReport(teamStatus: Team::STATUS_DEACTIVATED);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenCreatorIsNull(): void
{
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('report creator not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenSavedSearchIsNull(): void
{
$creator = $this->createMock(User::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('saved search not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenPromptIsNull(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('ask anything prompt not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleFailsReportWhenNotEnoughActivities(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_FAILED
&& $data['reason'] === AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$this->logger->expects($this->exactly(3))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSuccessfullyRequestsReport(): void
{
Carbon::setTestNow(Carbon::parse('2026-04-07 10:00:00'));
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$report->method('getUuid')->willReturn('report-uuid');
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_REQUESTED
&& isset($data['name'], $data['payload'], $data['requested_at'])));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->reportService->expects($this->once())
->method('getAskJiminnyGenerateReportPayload')
->willReturn(['key' => 'value']);
$this->reportService->expects($this->once())
->method('getReportFileName')
->willReturn('My Report - 7 Apr 2026');
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn(['act-1', 'act-2']);
$this->prophetClient->expects($this->once())
->method('sendRequest')
->willReturn(new \Jiminny\Component\ProphetAi\Dtos\ProphetResponseDto([]));
$this->logger->expects($this->exactly(4))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
Carbon::setTestNow();
}
public function testHandleCatchesGenericExceptionAndLogsError(): void
{
$this->reportService->expects($this->once())
->method('getReport')
->willThrowException(new \RuntimeException('DB error'));
$this->logger->expects($this->once())
->method('error')
->with($this->stringContains('Error'));
$job = $this->makeJob();
$reflection = new \ReflectionClass($job);
$triesProp = $reflection->getProperty('tries');
$triesProp->setAccessible(true);
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCatchesProphetExceptionAndSetsCorrectReason(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['reason'] === AutomatedReportResult::REASON_PROPHET_API_ERROR));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willThrowException(new ProphetException('Prophet failed'));
$this->logger->expects($this->once())
->method('error');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCreatesReportResultBeforeActivityFetch(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$callOrder = [];
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturnCallback(function () use ($reportResult, &$callOrder) {
$callOrder[] = 'createReportResult';
return $reportResult;
});
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturnCallback(function () use (&$callOrder) {
$callOrder[] = 'getActivityIds';
return [];
});
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
$this->assertEquals(['createReportResult', 'getActivityIds'], $callOrder);
}
public function testHandlePassesCorrectDataToCreateReportResult(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->method('update')->willReturn(true);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->with(
automatedReport: $report,
data: $this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_DEFAULT
&& $data['media_type'] === AutomatedReportsService::MEDIA_TYPE_PDF)
)
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app
.circleci
.cursor
.github
.sonarlint
.vscode
.windsurf
app, sources root
Actions
Component
Configuration
Console
Commands
Activities
Analytics
Calendars
Crm
DealInsights
Dev
Dialers
DTOs
Elasticsearch
EngagementStats
GeckoExport
Livestream
Mailboxes
Migrate
PlaybackThemes
Playbooks
Playlists
Postmark
ProphetAi
Reports
AutomatedReportsCommand.php, class
AutomatedReportsRetentionPolicyCommand.php, class
AutomatedReportsSendCommand.php, class
CreateMockAskJiminnyReportResultCommand.php, class
DeleteReportCommand.php, class
GenerateMarketingReport.php, class
Team.php, class
Usage.php, class
Slack
Teams...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9466
|
|
9467
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
// $reports = collect([AutomatedReport::find(68)]);
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1
14
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Jobs\AutomatedReports;
use Carbon\Carbon;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class RequestGenerateAskJiminnyReportJobTest extends TestCase
{
private AutomatedReportsService&MockObject $reportService;
private AskJiminnyReportActivityService&MockObject $activityService;
private ProphetClient&MockObject $prophetClient;
private LoggerInterface&MockObject $logger;
protected function setUp(): void
{
$this->reportService = $this->createMock(AutomatedReportsService::class);
$this->activityService = $this->createMock(AskJiminnyReportActivityService::class);
$this->prophetClient = $this->createMock(ProphetClient::class);
$this->logger = $this->createMock(LoggerInterface::class);
}
private function makeJob(string $uuid = 'report-uuid'): RequestGenerateAskJiminnyReportJob
{
return new RequestGenerateAskJiminnyReportJob($uuid);
}
private function makeActiveReport(
string $type = AutomatedReportsService::TYPE_ASK_JIMINNY,
bool $status = true,
string $teamStatus = Team::STATUS_ACTIVE,
): AutomatedReport&MockObject { // @phpstan-ignore-line
$team = $this->createMock(Team::class);
$team->method('getStatus')->willReturn($teamStatus);
$report = $this->createMock(AutomatedReport::class);
$report->method('getType')->willReturn($type);
$report->method('getStatus')->willReturn($status);
$report->method('getTeam')->willReturn($team);
return $report;
}
public function testUniqueIdReturnsReportUuid(): void
{
$job = $this->makeJob('my-unique-uuid');
$this->assertEquals('my-unique-uuid', $job->uniqueId());
}
public function testHandleSkipsWhenReportTypeIsNotAskJiminny(): void
{
$report = $this->makeActiveReport(type: 'exec_summary');
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('info')
->with($this->stringContains('Started'));
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('not an ask_jiminny report'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenReportIsInactive(): void
{
$report = $this->makeActiveReport(status: false);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenTeamIsInactive(): void
{
$report = $this->makeActiveReport(teamStatus: Team::STATUS_DEACTIVATED);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenCreatorIsNull(): void
{
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('report creator not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenSavedSearchIsNull(): void
{
$creator = $this->createMock(User::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('saved search not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenPromptIsNull(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('ask anything prompt not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleFailsReportWhenNotEnoughActivities(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_FAILED
&& $data['reason'] === AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$this->logger->expects($this->exactly(3))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSuccessfullyRequestsReport(): void
{
Carbon::setTestNow(Carbon::parse('2026-04-07 10:00:00'));
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$report->method('getUuid')->willReturn('report-uuid');
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_REQUESTED
&& isset($data['name'], $data['payload'], $data['requested_at'])));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->reportService->expects($this->once())
->method('getAskJiminnyGenerateReportPayload')
->willReturn(['key' => 'value']);
$this->reportService->expects($this->once())
->method('getReportFileName')
->willReturn('My Report - 7 Apr 2026');
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn(['act-1', 'act-2']);
$this->prophetClient->expects($this->once())
->method('sendRequest')
->willReturn(new \Jiminny\Component\ProphetAi\Dtos\ProphetResponseDto([]));
$this->logger->expects($this->exactly(4))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
Carbon::setTestNow();
}
public function testHandleCatchesGenericExceptionAndLogsError(): void
{
$this->reportService->expects($this->once())
->method('getReport')
->willThrowException(new \RuntimeException('DB error'));
$this->logger->expects($this->once())
->method('error')
->with($this->stringContains('Error'));
$job = $this->makeJob();
$reflection = new \ReflectionClass($job);
$triesProp = $reflection->getProperty('tries');
$triesProp->setAccessible(true);
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCatchesProphetExceptionAndSetsCorrectReason(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['reason'] === AutomatedReportResult::REASON_PROPHET_API_ERROR));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willThrowException(new ProphetException('Prophet failed'));
$this->logger->expects($this->once())
->method('error');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCreatesReportResultBeforeActivityFetch(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$callOrder = [];
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturnCallback(function () use ($reportResult, &$callOrder) {
$callOrder[] = 'createReportResult';
return $reportResult;
});
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturnCallback(function () use (&$callOrder) {
$callOrder[] = 'getActivityIds';
return [];
});
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
$this->assertEquals(['createReportResult', 'getActivityIds'], $callOrder);
}
public function testHandlePassesCorrectDataToCreateReportResult(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->method('update')->willReturn(true);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->with(
automatedReport: $report,
data: $this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_DEFAULT
&& $data['media_type'] === AutomatedReportsService::MEDIA_TYPE_PDF)
)
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app
.circleci
.cursor
.github
.sonarlint
.vscode
.windsurf
app, sources root
Actions
Component
Configuration
Console
Commands
Activities
Analytics
Calendars
Crm
DealInsights
Dev
Dialers
DTOs
Elasticsearch
EngagementStats
GeckoExport
Livestream
Mailboxes
Migrate
PlaybackThemes
Playbooks
Playlists
Postmark
ProphetAi
Reports
AutomatedReportsCommand.php, class
AutomatedReportsRetentionPolicyCommand.php, class
AutomatedReportsSendCommand.php, class
CreateMockAskJiminnyReportResultCommand.php, class
DeleteReportCommand.php, class
GenerateMarketingReport.php, class
Team.php, class
Usage.php, class
Slack
Teams
Tracks
Transcription
Twilio
Users
Vocabulary
Zoom
CoachingFeedbacksUpdateEsActivities.php, class
Command.php, class
CreateDatabaseUsers.php, class
DatabaseTableCount.php, class
DeleteOldAiCrmNotesCommand.php, class
DeleteS3LeftoversCommand.php, class
DevPostmanCommand.php, final class
DiarizeViaAiParticipantIdentificationCommand.php, class
EncryptTokensCommand.php, class
EngagementStatsRegenerateCommand.php, class
FeatureFlagsHelper.php...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9467
|
|
9468
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp• 0DOCKER-rw-r--r--• 881DEV (-zsh)882APP (-zsh)83-zsh1lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g95425-rw-r--r--1lukasstaff11 Apr 23:14 screenpipe.2026-04-11.0.10g72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status{"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*la6lSupport Daily - in 4h 21 m100% <47-zsh₴4-zsh-zsh886-zshO ₴7Tue 14 Apr 10:39:49T81* Unable to acce...O 88...
|
NULL
|
NULL
|
NULL
|
9468
|
|
9469
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Jira Cloud
Toast
Google Calendar
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Nikolay Yankov
Apr 1st at 12:30:06 PM
12:30 PM
Според мен става
1 reaction, react with +1 emoji
1
Add reaction…
Jump to date
Lukas Kovalik
Apr 3rd at 10:23:33 AM
10:23 AM
покрай новата опашката тя в крайна сметка в prophet ли е или php
Steliyan Georgiev
Apr 3rd at 10:24:14 AM
10:24 AM
Prophet ще работи с опашката, PHP - не
PHP ще вика един ендпоинт в Профет просто
Lukas Kovalik
Apr 3rd at 10:24:34 AM
10:24 AM
ок, значи няма зор от мен
Apr 3rd at 10:25:01 AM
10:25
ще я сложа като при automated reports във QUEUE_ANALYTICS
Steliyan Georgiev
Apr 3rd at 10:25:44 AM
10:25 AM
не разбрах какво ще сложиш в QUEUE_ANALYTICS? Не знам и какво е QUEUE_ANALYTICS
(edited)
Lukas Kovalik
Apr 3rd at 10:26:44 AM
10:26 AM
php опашка където ще е job който ще вика prophet endpoint
Nikolay Yankov
Apr 3rd at 5:14:11 PM
5:14 PM
Казах на Вес за опашката, понеделник ще я гледа
Пита ме какви да са настройките, Стели ако трябва нещо, кажи му
Steliyan Georgiev
Apr 3rd at 5:21:56 PM
5:21 PM
Ще му пиша
Jump to date
Lukas Kovalik
Apr 8th at 10:09:17 AM
10:09 AM
ask-jiminny-report
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Steliyan Georgiev
Apr 8th at 4:12:14 PM
4:12 PM
Все още кодът не e в master, защото ПРът не е одобрен, но ето така изглежда един примирен рекуест за Panorama report:
curl -X 'POST' \
'
http://localhost:9080/ask-anything-on-demand/request-report
http://localhost:9080/ask-anything-on-demand/request-report
' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"userQuestion": "What are the most common topics in these calls?",
"history": [
],
"attemptNumber": 1,
"callIds": [
"77332439",
"74714697",
"34525304",
"2574920"
],
"teamId": 1,
"request_id": "test_req_q_2",
"callback_url": "
https://localhost:8080
https://localhost:8080
",
"reportPeriod": "Apr 1 - Apr 8"
}'
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 8th at 4:12:58 PM
4:12 PM
ще го наглася
(edited)
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
New
Nikolay Yankov
Today at 10:19:59 AM
10:19 AM
като създам дефиниция daily, веднага ли трябва да създаде репорт?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 10:32:27 AM
10:32 AM
10 мин минаха, още не идва репорт
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:34:10 AM
10:34 AM
не само daily но трябва да се пусне команда
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:35:08 AM
10:35
php artisan automated-reports
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 10:35:39 AM
10:35 AM
значи не създава веднага по принцип, в някакъв час на деня ли стъздава?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:36:11 AM
10:36 AM
това ще гледа всичко applicable за днес (ако не понедлник или начало на месец е само daily)
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
SackFileEditViewJiminny ...DMs= Unreadse Threads6 Huddles≥ Drafts & sent8 DirectoriesAchivityEh External connectionsFiles# Starred& platform-inner-teamMore# Channels# ai-chapter# alerts# backend#: confusion-clinic# curiosity_labiengineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches#: randomuc releases# sofia-office# support# thank-yous# the_people_of jimi...Direct messazesAneliya Angelova, .&e Steliyan Georgiev3Adelina Petrova, Ili...(®. Adelina Petrova(% Galya Dimitrova *€. Vasil VasilevPa Nikolay Nikolov 72 Galva Dimitrova, Ni..Galva Dimitrova. Ni..Nikolay Yankov::AppsJira CloudoastGoogle Cale..HistoryWindowHelpQ Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan Georgiev84)Q:• Messagest Add canvasLukas Kovalik 10:09 AMask-jiminny-reportWednesday, April 8th~Steliyan Georgiev 4:12 PMВсе още кодът не е в master, защото ПРът не е одобрен, но ето така изглежда един примирен рекуест за Panoramarevorucurl -X 'POST'\"http://localhost:9080/ask-anything-on-demand/request-report'\-H'accept: application/json' \-H 'Content-Type: application/json' \-d "["userQuestion": "What are the most common topics in these calls?","history": ["attemptNumber": 1,"Calllas'"33/437""74714697","34525304","2574920""teamld": 1,"request_id": "test_req_q_2","callback_url": "https://localhost:8080","reportPeriod": "Apr 1 - Apr 8"Lukas Kovalik 4:12 PMще го наглася (edited)Today ~A NewNikolay Yankoy 10:19 AMкато създам дефиниция daily, веднага ли трябва да създаде репорт?INkO av YankoV 10:32 AM10 мин минаха, още не идва репортLukas Kovalk 10:34 AMIне cамo calv по толова ла се пусне комануда.php artisan automated-reportsINKOaV TalnKoV TUSSAMзначи не създава веднага по принцип. в някакьв час на деня ли стъздава?Lukas Novallk 1036 AMIтова ще гледа всичко applicable за днес (ако не понедлник или начало на месеш е само dailv)коонго пуска поез ноштака че манмално пусни пои тестванеако трябва да тестваме други репорти може да променя команда за тестване да приема параметьр за report template ид си пускаме определен когато тествамеMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAaC 0 lhl 0 l Support Daily. in 4h21m A 100% C/ & Tue 14 Apr 10:39:55plot tracking #llys4into JY-18909-automated-reports-ask-j iminny from JY-20543-AJ-report-trackings ago • edited -nny's task in 1m 11s — View jobeview feedbackean and well-structured. Good use of the event/listener pattern, proper queuing viaverage. A few things worth flagging:logging on GuzzleExceptionts/UserPilot/TrackAutomatedReportGeneratedEvent.php L44-45e) {ently discarded. If UserPilot API calls start failing, there's no observable signal. Considere) +'UserPilot tracking failed for automated report', l'exception' => $e->gethusoage tracking on queue retryts/UserPilot/TrackAutomatedReportGeneratedEvent.php L36-47and fails for user #2 (throwing GuzzleException ), the job is released and retried -exec_summary reports with multiple recipients this could cause duplicate UserPilotgiven the low stakes of analytics data, but worth being aware of.buildPayloadts/UserPilot/TrackAutomatedReportGeneratedEvent.php L62oãdlAuromatedkevorr saucomatedkevoroy: arravay is missing (the method has no return type declared). Minor but inconsistent with theipline in the file.d built before users are resolvedtg/UserPilot/TrackAutomatedReportGeneratedEvent.php L35-36...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
NULL
|
9469
|
|
9470
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Jira Cloud
Toast
Google Calendar
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Nikolay Yankov
Apr 1st at 12:30:06 PM
12:30 PM
Според мен става
1 reaction, react with +1 emoji
1
Add reaction…
Jump to date
Lukas Kovalik
Apr 3rd at 10:23:33 AM
10:23 AM
покрай новата опашката тя в крайна сметка в prophet ли е или php
Steliyan Georgiev
Apr 3rd at 10:24:14 AM
10:24 AM
Prophet ще работи с опашката, PHP - не
PHP ще вика един ендпоинт в Профет просто
Lukas Kovalik
Apr 3rd at 10:24:34 AM
10:24 AM
ок, значи няма зор от мен
Apr 3rd at 10:25:01 AM
10:25
ще я сложа като при automated reports във QUEUE_ANALYTICS
Steliyan Georgiev
Apr 3rd at 10:25:44 AM
10:25 AM
не разбрах какво ще сложиш в QUEUE_ANALYTICS? Не знам и какво е QUEUE_ANALYTICS
(edited)
Lukas Kovalik
Apr 3rd at 10:26:44 AM
10:26 AM
php опашка където ще е job който ще вика prophet endpoint
Nikolay Yankov
Apr 3rd at 5:14:11 PM
5:14 PM
Казах на Вес за опашката, понеделник ще я гледа
Пита ме какви да са настройките, Стели ако трябва нещо, кажи му
Steliyan Georgiev
Apr 3rd at 5:21:56 PM
5:21 PM
Ще му пиша
Jump to date
Lukas Kovalik
Apr 8th at 10:09:17 AM
10:09 AM
ask-jiminny-report
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Steliyan Georgiev
Apr 8th at 4:12:14 PM
4:12 PM
Все още кодът не e в master, защото ПРът не е одобрен, но ето така изглежда един примирен рекуест за Panorama report:
curl -X 'POST' \
'
http://localhost:9080/ask-anything-on-demand/request-report
http://localhost:9080/ask-anything-on-demand/request-report
' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"userQuestion": "What are the most common topics in these calls?",
"history": [
],
"attemptNumber": 1,
"callIds": [
"77332439",
"74714697",
"34525304",
"2574920"
],
"teamId": 1,
"request_id": "test_req_q_2",
"callback_url": "
https://localhost:8080
https://localhost:8080
",
"reportPeriod": "Apr 1 - Apr 8"
}'
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 8th at 4:12:58 PM
4:12 PM
ще го наглася
(edited)
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
New
Nikolay Yankov
Today at 10:19:59 AM
10:19 AM
като създам дефиниция daily, веднага ли трябва да създаде репорт?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 10:32:27 AM
10:32 AM
10 мин минаха, още не идва репорт
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:34:10 AM
10:34 AM
не само daily но трябва да се пусне команда
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:35:08 AM
10:35
php artisan automated-reports
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 10:35:39 AM
10:35 AM
значи не създава веднага по принцип, в някакъв час на деня ли стъздава?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:36:11 AM
10:36 AM
това ще гледа всичко applicable за днес (ако не понедлник или начало на месец е само daily)
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:36:27 AM
10:36
крон го пуска през нощ
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:37:19 AM
10:37
така че мануално пусни при тестване
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ablSupport Daily • in 4h 20 m100% <47-zshDOCKER-rw-r--r--981DEV (-zsh)882APP (-zsh)83-zsh1 lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g9542511 Apr 23:14 screenpipe.2026-04-11.0.10g-rw-r--r--1 lukasstaff72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status₴4"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}{Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.1oglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*-zsh-zsh886-zshO ₴7Tue 14 Apr 10:40:19181* Unable to acce...O 88...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
NULL
|
9470
|
|
9472
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
{ Support Daily - in 4h 20 mRequestGenerateAsk.liminnvRenort.lob Test100% C•Tue 14 Aor 10:40:26SlackFileconsole [PROD]Al console [EU]A console [STAGING]ateAskJiminnyReportJobf...}'createReportResult');HomeA1 A14 X4->prophetClient, $this->logger);DMsAchvitMoreEditViewJiminny...= Unreads€ Threads6a Huddles→ Drafts & sent8 DirectoriesAb External connections# Starred& platform-inner-team# Channels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of_jimi.... Direct messages3 Aneliya Angelova,...e Steliyan Georgiev3 Adelina Petrova, Ili...P. Adelina PetrovaP. Galya Dimitrova MC. Vasil VasilevD& Nikolay Nikolov **2 Galya Dimitrova, Ni...2 Galya Dimitrova, Ni.... Nikolay Yankov: Apps• Jira Cloud® Toast(aj Google Cale...HistoryWindowHelpQ Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan Georgiev84(0|Messagest) Add canvasLukas Kovalik 10:09 AMask-jiminny-reportWednesday, April 8th~Steliyan Georgiev 4:12 PMВсе още кодът не е в master, защото ПРът не е одобрен, но ето така изглежда един примирен рекуест за Panoramareport:curl-X'POST'\"http://localhost:9080/ask-anything-on-demand/request-report'\-H'accept: application/json'\-H 'Content-Type: application/json' \-d'["userQuestion": "What are the most common topics in these calls?","history": ["attemptNumber": 1,"callids": ["77332439","74714697","34525304","2574920""teamld": 1,"request_id": "test_req_q_2","callback_url": "https://localhost:8080","reportPeriod": "Apr 1 - Apr 8"Lukas Kovalik 4:12 PMМе ще го наглася (edited)odavyNeWNikolay Yankov 10:19 AMкато създам дефиниция daily, веднага ли трябва да създаде репорт?NkO av YankoV 10:32 AM10 мин минаха, още не идва репортLukas Kovalk 10:34 AMне само аашу но тряова да се пусне командаpne ar eesan auconaree-revortsNikolay Yankov 10:35 AMзначи не сьзлава велна а по поиншип. в някакьв час на мленящи сльзлаванLukas Kovalik 10:36 AMтова ще гледа всичко applicable за днес (ако не понедлник или начало на месеш е само dailvkоон го пуска поез ношіака че манмално пусни пои тестванеако трябва да тестваме други репорти може да променя команда за тестване да приема параметьр за report template ид си пускаме определен когато тествамеMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievWinasun leams95:4g Ulr-ofa 4 spacespilot tracking #11932nto JY-18909-automated-reports-ask-jiminny from JY-20543-AJ-report-tracking &s ago • edited -hny's task in 1m 11s — View jobreview feedbacklean and well-structured. Good use of the event/listener pattern, proper queuing viaverage. A few things worth flagging:logging on GuzzleExceptionts/UserPilot/TrackAutomatedReportGeneratedEvent.php L44-45e) {ently discarded. If UserPilot API calls start failing, there's no observable signal. Considere) 1'UserPilot tracking failed for automated report', l'exception' = $e->gethessage tracking on queue retryts/UserPilot/TrackAutomatedReportGeneratedEvent.php L36-47and fails for user #2 (throwing GuzzleException ), the job is released and retried —exec_summary reports with multiple recipients this could cause duplicate UserPilotgiven the low stakes of analytics data, but worth being aware of.bulldPay loadts/UserPilot/TrackAutomatedReportGeneratedEvent.php L62oad auromateckevorr sauronavedkeooro: arravay is missing (the method has no return type declared). Minor but inconsistent with theipline in the file.d built before users are resolvedt9/UserPilot/TrackAutomatedReportGeneratedEvent.php L35-36...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9472
|
|
9474
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp• 0DOCKER-rw-r--r--• 881DEV (-zsh)882APP (-zsh)83-zsh1lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g95425-rw-r--r--1lukasstaff11 Apr 23:14 screenpipe.2026-04-11.0.10g72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status{"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*(ablSupport Daily • in 4h 20 m100% <47-zsh₴4-zsh-zsh886-zshO ₴7Tue 14 Apr 10:40:29181* Unable to acce...O 88...
|
NULL
|
NULL
|
NULL
|
9474
|
|
9475
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpgithub.com/jiminny/app/pull/11932~ Google GeminiPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports UserSRD-6779 | JY-20632 | Unable toJy 19798 evaluation for ai activity tJiminnyhsAsk Jiminny test report - 8 Apr 20)Service-Desk - Queues - PlatformJY-20543 add AJ reports User pilc+ New Tab• The Danger: While valid Python, injectingconditionals directly into a multi-linestring sequence via'str" ifcondition else "" ) + f"str" isJiminnyapo.staging.miny.comjs, missingrrors duringt fragmentsnererPythonprompt_parts = ["# Answer\n\n"]if report mode:prompt_parts.append("**Important:prompt_parts. append(f"Synthesize all {Overly Defensive Call Count FallbackLine 195 contains: call_count =len(aa_request.call_ids) ifaa_request.call_ids else 0• The Danger: This impliesad_request.call_ids might be None.If an empty state is valid, this line handlesit correctly. However, a request to analyze"Ask Anything" on calls without anycall_ids represents a logically invalidrequest state.• The Fix: Ensure upstream validationcatches empty call_ids before itreaches the report generator, or explicitlyraise a ValueError here to preventgenerating a "Data Source" sectionbased on zero calls.• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageCc 40 ll O f SupportDaily- in4h20m A 100%a & Tue 14 Apr 10:40:30•*8? OpenJY-20543 add AJ reports User pilot tracking #11932LakyLak wants to merge 4 commits into JY-18909-automated-reports-ask-jiminny from JY-20543-AJ-report-trackingclaude bot commented 5 days ago • edited-Claude finished @yalokin-jiminny's task in 1m 11s — View jobCode ReviewGather contextRead changed files• Analyze code and provide review feedbackOverall the implementation is clean and well-structured. Good use of the event/listener pattern, proper queuing viaShouldQueue , and solid test coverage. A few things worth flagging:ssues1. Silent error swallowing - no logging on GuzzleExceptionapp/Listeners/AutomatedReports/UserPilot/TrackAutomatedReportGeneratedEvent.php L44-45} catch (GuzzleException $e) {sthis->release(3600);The exception is caught and silently discarded. If UserPilot API calls start failing, there's no observable signal. Considerlogging the error before releasing:catch (ouzzletxception se) &$this->logger->warning('UserPilot tracking failed for automated report', ('exception' => $e->gethessagsthis->release(3600);rix this "2. Partial retry risk - duplicate tracking on queue retryapp/Listeners/AutomatedReports/UserPilot/TrackAutomatedReportGeneratedEvent.php L36-47If tracking succeeds for user #1 and fails for user #2 (throwing GuzzleException ), the job is released and retried —which will re-track user #1. For exec_summary reports with multiple recipients this could cause duplicate UserPilotevents. This may be acceptable given the low stakes of analytics data, but worth being aware of.3. Missing return type hint on buildPayloadapp/Listeners/AutomatedReports/UserPilot/TrackAutomatedReportGeneratedEvent.php L62orivate Tuncuion vulloravload suromatedrkevorl saucomatedkevorey: arravThe reua tyse atypeai aiscip if Msng Ithe method has no retun type deciared); Minor but inconstent with theFix this →4. Minor inefficiency — payload built before users are resolvedapp/Listeners/AutomatedReports/UserPilot/TrackAutomatedReportGeneratedEvent.php L35-36...
|
NULL
|
NULL
|
NULL
|
9475
|
|
9476
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp• 0DOCKER-rw-r--r--• 881DEV (-zsh)882APP (-zsh)83-zsh1lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g95425-rw-r--r--1lukasstaff11 Apr 23:14 screenpipe.2026-04-11.0.10g72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status{"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*(ablSupport Daily • in 4h 20 m100% <47-zsh₴4-zsh-zsh886-zshO ₴7Tue 14 Apr 10:40:31181* Unable to acce...O 88...
|
NULL
|
NULL
|
NULL
|
9476
|
|
9477
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpdoo.sideme.minny.com/ di-teoorls~ Google Gemini...C< 40 ll O I SupportDaily- in 4h20m CA 100%C• 8 Tue 14 Apr 10:40:323 Ask Jiminny reportsPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloSRD-6779 | JY-20632 | Unable toJy 19798 evaluation for ai activity tJiminnyAsk Jiminny test report - 8 Apr 20)Service-Desk - Queues - PlatformJY-20543 add AJ reports User pilc+ New TabAl Reports• Report nameNAME -Ask Jiminny Test Report - 8 Apr 2026PeriodiReport Type© Clear all |• The Danger: While valid Python, injectingconditionals directly into a multi-linestring sequence via( "str" ifcondition else "" ) + f"str" ishighly prone to formatting bugs, missingspaces, or accidental syntax errors duringfuture refactors.• The Fix: Construct the prompt fragmentsusing standard control flow for betterreadability:Pythonprompt_parts = ["# Answer\n\n"]if report mode:prompt_parts.append("**Important:prompt_parts. append(f"Synthesize all &lOverly Defensive Call Count FallbackLine 195 contains: call_count =len(aa_request.call_ids) ifaa_request.call_ids else 0• The Danger: This impliesad_request.call_ids might be None.If an empty state is valid, this line handlesit correctly. However, a request to analyze"Ask Anything" on calls without anycall_ids represents a logically invalidrequest state.• The Fix: Ensure upstream validationcatches empty call_ids before itreaches the report generator, or explicitlyraise a ValueError here to preventgenerating a "Data Source" sectionbased on zero calls.10FREQUENCY+DailySHAREDCCanDATE09/04/9016ACTIONS• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageJY-18909-automated-reports-ask-jiminny = 869453...
|
NULL
|
NULL
|
NULL
|
9477
|
|
9480
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpdoo.sideme.minny.com/ di-teoorls~ Google Gemini...C< 40 ll O I SupportDaily- in 4h20m CA 100%C• 8 Tue 14 Apr 10:40:393 Ask Jiminny reportsPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloSRD-6779 | JY-20632 | Unable toJy 19798 evaluation for ai activity tJiminnyAsk Jiminny test report - 8 Apr 20)Service-Desk - Queues - PlatformJY-20543 add AJ reports User pilc+ New TabAl Reports• Report nameNAME -Ask Jiminny Test Report - 8 Apr 2026PeriodiReport Type© Clear all |• The Danger: While valid Python, injectingconditionals directly into a multi-linestring sequence via( "str" ifcondition else "" ) + f"str" ishighly prone to formatting bugs, missingspaces, or accidental syntax errors duringfuture refactors.• The Fix: Construct the prompt fragmentsusing standard control flow for betterreadability:Pythonprompt_parts = ["# Answer\n\n"]if report mode:prompt_parts.append("**Important:prompt_parts. append(f"Synthesize all &lOverly Defensive Call Count FallbackLine 195 contains: call_count =len(aa_request.call_ids) ifaa_request.call_ids else 0• The Danger: This impliesad_request.call_ids might be None.If an empty state is valid, this line handlesit correctly. However, a request to analyze"Ask Anything" on calls without anycall_ids represents a logically invalidrequest state.• The Fix: Ensure upstream validationcatches empty call_ids before itreaches the report generator, or explicitlyraise a ValueError here to preventgenerating a "Data Source" sectionbased on zero calls.10FREQUENCY+DailySHAREDCCanDATE09/04/9016ACTIONS• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageJY-18909-automated-reports-ask-jiminny = 869453...
|
NULL
|
NULL
|
NULL
|
9480
|
|
9481
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
// $reports = collect([AutomatedReport::find(68)]);
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1
14
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Jobs\AutomatedReports;
use Carbon\Carbon;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class RequestGenerateAskJiminnyReportJobTest extends TestCase
{
private AutomatedReportsService&MockObject $reportService;
private AskJiminnyReportActivityService&MockObject $activityService;
private ProphetClient&MockObject $prophetClient;
private LoggerInterface&MockObject $logger;
protected function setUp(): void
{
$this->reportService = $this->createMock(AutomatedReportsService::class);
$this->activityService = $this->createMock(AskJiminnyReportActivityService::class);
$this->prophetClient = $this->createMock(ProphetClient::class);
$this->logger = $this->createMock(LoggerInterface::class);
}
private function makeJob(string $uuid = 'report-uuid'): RequestGenerateAskJiminnyReportJob
{
return new RequestGenerateAskJiminnyReportJob($uuid);
}
private function makeActiveReport(
string $type = AutomatedReportsService::TYPE_ASK_JIMINNY,
bool $status = true,
string $teamStatus = Team::STATUS_ACTIVE,
): AutomatedReport&MockObject { // @phpstan-ignore-line
$team = $this->createMock(Team::class);
$team->method('getStatus')->willReturn($teamStatus);
$report = $this->createMock(AutomatedReport::class);
$report->method('getType')->willReturn($type);
$report->method('getStatus')->willReturn($status);
$report->method('getTeam')->willReturn($team);
return $report;
}
public function testUniqueIdReturnsReportUuid(): void
{
$job = $this->makeJob('my-unique-uuid');
$this->assertEquals('my-unique-uuid', $job->uniqueId());
}
public function testHandleSkipsWhenReportTypeIsNotAskJiminny(): void
{
$report = $this->makeActiveReport(type: 'exec_summary');
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('info')
->with($this->stringContains('Started'));
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('not an ask_jiminny report'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenReportIsInactive(): void
{
$report = $this->makeActiveReport(status: false);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenTeamIsInactive(): void
{
$report = $this->makeActiveReport(teamStatus: Team::STATUS_DEACTIVATED);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->exactly(2))
->method('info');
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenCreatorIsNull(): void
{
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('report creator not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenSavedSearchIsNull(): void
{
$creator = $this->createMock(User::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('saved search not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSkipsWhenPromptIsNull(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn(null);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->logger->expects($this->once())
->method('warning')
->with($this->stringContains('ask anything prompt not found'));
$this->reportService->expects($this->never())->method('createReportResult');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleFailsReportWhenNotEnoughActivities(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_FAILED
&& $data['reason'] === AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$this->logger->expects($this->exactly(3))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleSuccessfullyRequestsReport(): void
{
Carbon::setTestNow(Carbon::parse('2026-04-07 10:00:00'));
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$report->method('getUuid')->willReturn('report-uuid');
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_REQUESTED
&& isset($data['name'], $data['payload'], $data['requested_at'])));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->reportService->expects($this->once())
->method('getAskJiminnyGenerateReportPayload')
->willReturn(['key' => 'value']);
$this->reportService->expects($this->once())
->method('getReportFileName')
->willReturn('My Report - 7 Apr 2026');
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn(['act-1', 'act-2']);
$this->prophetClient->expects($this->once())
->method('sendRequest')
->willReturn(new \Jiminny\Component\ProphetAi\Dtos\ProphetResponseDto([]));
$this->logger->expects($this->exactly(4))
->method('info');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
Carbon::setTestNow();
}
public function testHandleCatchesGenericExceptionAndLogsError(): void
{
$this->reportService->expects($this->once())
->method('getReport')
->willThrowException(new \RuntimeException('DB error'));
$this->logger->expects($this->once())
->method('error')
->with($this->stringContains('Error'));
$job = $this->makeJob();
$reflection = new \ReflectionClass($job);
$triesProp = $reflection->getProperty('tries');
$triesProp->setAccessible(true);
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCatchesProphetExceptionAndSetsCorrectReason(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->expects($this->once())
->method('update')
->with($this->callback(fn ($data) => $data['reason'] === AutomatedReportResult::REASON_PROPHET_API_ERROR));
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willThrowException(new ProphetException('Prophet failed'));
$this->logger->expects($this->once())
->method('error');
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
public function testHandleCreatesReportResultBeforeActivityFetch(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$callOrder = [];
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->willReturnCallback(function () use ($reportResult, &$callOrder) {
$callOrder[] = 'createReportResult';
return $reportResult;
});
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturnCallback(function () use (&$callOrder) {
$callOrder[] = 'getActivityIds';
return [];
});
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
$this->assertEquals(['createReportResult', 'getActivityIds'], $callOrder);
}
public function testHandlePassesCorrectDataToCreateReportResult(): void
{
$creator = $this->createMock(User::class);
$savedSearch = $this->createMock(\Jiminny\Models\Activity\Search::class);
$prompt = $this->createMock(\Jiminny\Models\AskAnything\AskAnythingPrompt::class);
$report = $this->makeActiveReport();
$report->method('getCreator')->willReturn($creator);
$report->method('getSavedSearch')->willReturn($savedSearch);
$report->method('getAskAnythingPrompt')->willReturn($prompt);
$reportResult = $this->createMock(AutomatedReportResult::class);
$reportResult->method('getUuid')->willReturn('result-uuid');
$reportResult->method('update')->willReturn(true);
$this->reportService->expects($this->once())
->method('getReport')
->willReturn($report);
$this->reportService->expects($this->once())
->method('createReportResult')
->with(
automatedReport: $report,
data: $this->callback(fn ($data) => $data['status'] === AutomatedReportResult::STATUS_DEFAULT
&& $data['media_type'] === AutomatedReportsService::MEDIA_TYPE_PDF)
)
->willReturn($reportResult);
$this->activityService->expects($this->once())
->method('getActivityIdsForSavedSearch')
->willReturn([]);
$job = $this->makeJob();
$job->handle($this->reportService, $this->activityService, $this->prophetClient, $this->logger);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9481
|
|
9482
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ablSupport Daily - in 4h 20 m100% 197-zshDOCKER-rw-r--r--981DEV (-zsh)882APP (-zsh)83-zsh1 lukasstaff1327361lukasstaff9 Apr 21:27 screenpipe.2026-04-09.0.10g9542511 Apr 23:14 screenpipe.2026-04-11.0.10g-rw-r--r--1 lukasstaff72332 12 Apr 23:55 screenpipe.2026-04-12.0.10g-rw-r--r--1 lukasstaff59116 13 Apr 19:37 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano config. jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nano config.jsonlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-stopscreenpipe stoppedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"sratesst tusathy,"audio_status": "disabled","Last_frame": "2026-04-14T09:44:01+03:00","uptime": 1243.255541917,"fps": 0.254975738544637,"frames": 317}{Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sp-status"status": "healthy""frame_status": "ok""audio_status": "disabled","last_frame": "2026-04-14T10:12:37+03:00","uptime": 2959.307842208,"fps": 0.[CREDIT_CARD],"frames": 929}.ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $887M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $4.0K/Users/Lukas/.screenpipe/config.json308M/Users/lukas/.screenpipe/data561M/Users/lukas/.screenpipe/db.sqlite64K/Users/lukas/.screenpipe/db.sqlite-shm18M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/Lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.10g96K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-12.0.log72K/Users/lukas/.screenpipe/screenpipe.2026-04-13.0.1og32K/Users/lukas/.screenpipe/screenpipe.2026-04-14.0.1oglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Udu -sh ~/.screenpipedu -sh ~/.screenpipe/*₴4-zsh-zsh886-zshO 87X * Unable tchfcce.Tue 14 Apr 10:40:48181O 88...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
NULL
|
9482
|
|
9483
|
╭─── Claude Code v2.1.97 ───────────────────────── ╭─── Claude Code v2.1.97 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │ │
│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │ │
│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a proje│ │
│ ▐▛███▜▌ │ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
│ ▝▜█████▛▘ │ Recent activity │ │
│ ▘▘ ▝▝ │ No recent activity │ │
│ Sonnet 4.6 · Claude Pro · │ │
│ [EMAIL]'s Organization │ │
│ /Users/lukas │ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
❯ what did I do yesterday? Give me summary of my activity from screenpipe
⏺ Here's your activity summary for yesterday (April 11):
---
Total active time: ~3 hours (roughly 15:00–21:00 UTC)
Main focus areas
Screenpipe development (~2h combined)
- Heavy terminal work in iTerm2 (67 min in zsh + SSH)
- Building a screenpipe data UI — working remotely on [IP_ADDRESS] via SSH
- Editing report.py and a bash script in VS Code
- Checking the Screenpipe Dashboard in Firefox
Work (Jiminny) (~15 min)
- Checked the Scrum Board for Platform Sprint 1 Q2
- Looked at service desk queues
- Checked an email about an "Ask Jiminny" |