tango-app-api-analysis-traffic 3.1.0-alpha.4 → 3.1.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tango-app-api-analysis-traffic",
3
- "version": "3.1.0-alpha.4",
3
+ "version": "3.1.0-alpha.6",
4
4
  "description": "Traffic Analysis",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -283,7 +283,7 @@ export const sendEmailers = async ( req, res ) => {
283
283
  storeCount: emailerSourceData._source.storeIds.length-1,
284
284
  storeBaseImage: cameraBaseImage,
285
285
  };
286
- console.log( 'cameraBaseImage 1=>', cameraBaseImage );
286
+ // console.log( 'cameraBaseImage 1=>', cameraBaseImage );
287
287
  // // Get Client Data ///
288
288
  let clientData = await clientService.findOne( { clientId: emailerSourceData._source.clientId }, { clientId: 1, emailersConfig: 1, featureConfigs: 1, clientName: 1 } );
289
289
 
@@ -308,8 +308,11 @@ export const sendEmailers = async ( req, res ) => {
308
308
  missedOpportunityCalculation: clientData?.featureConfigs?.missedOpportunityCalculation || 'engagers-conversion',
309
309
  bufferTime: 30,
310
310
  },
311
+ templateId: emailerSourceData._id,
311
312
  };
312
313
  // console.log( 'templateData =>', templateData );
314
+ // console.log( 'emailerSourceData =>', emailerSourceData );
315
+
313
316
 
314
317
  // // Get Lamda Metrics Data ////
315
318
  let lamdaMetrics = await getLamdaMetricsData( templateData );
@@ -380,7 +383,7 @@ async function getLamdaMetricsData( templateData ) {
380
383
  // Default Value
381
384
  }
382
385
  } catch ( error ) {
383
- console.log( 'error getLamdaMetricsData=>', error );
386
+ // console.log( 'error getLamdaMetricsData=>', error );
384
387
  logger.error( { error: error, function: 'getLamdaMetricsData' } );
385
388
  return false;
386
389
  }
@@ -448,7 +451,7 @@ async function lamdaAPI1( templateData ) {
448
451
  }
449
452
  return lamdaAPIResultData;
450
453
  } catch ( error ) {
451
- console.log( 'error lamdaAPI1=>', error );
454
+ // console.log( 'error lamdaAPI1=>', error );
452
455
  logger.error( { error: error, function: 'lamdaAPI1' } );
453
456
  return false;
454
457
  }
@@ -520,7 +523,7 @@ async function lamdaAPI2( templateData ) {
520
523
  }
521
524
  return lamdaAPIResultData;
522
525
  } catch ( error ) {
523
- console.log( 'error lamdaAPI2=>', error );
526
+ // console.log( 'error lamdaAPI2=>', error );
524
527
  logger.error( { error: error, function: 'lamdaAPI2' } );
525
528
  return false;
526
529
  }
@@ -634,7 +637,7 @@ async function lamdaAPI3( templateData ) {
634
637
  }
635
638
  return lamdaAPIResultData;
636
639
  } catch ( error ) {
637
- console.log( 'error lamdaAPI3=>', error );
640
+ // console.log( 'error lamdaAPI3=>', error );
638
641
  logger.error( { error: error, function: 'lamdaAPI3' } );
639
642
  return false;
640
643
  }
@@ -752,12 +755,12 @@ async function lamdaAPI4( templateData ) {
752
755
  let newTemplateData = templateData;
753
756
  const overallLamdaURL = 'https://7ozawm36scwmwhh4vzkecqkgv40lpjxt.lambda-url.ap-south-1.on.aws/';
754
757
  let lamdaAPIResultData = await LamdaServiceCall( overallLamdaURL, newTemplateData );
755
- if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
758
+ if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== 200 ) {
756
759
  return '';
757
760
  }
758
761
  return lamdaAPIResultData;
759
762
  } catch ( error ) {
760
- console.log( 'error lamdaAPI4=>', error );
763
+ // console.log( 'error lamdaAPI4=>', error );
761
764
  logger.error( { error: error, function: 'lamdaAPI4' } );
762
765
  return false;
763
766
  }
@@ -803,11 +806,11 @@ async function hourlyChartLamdaAPI( templateData ) {
803
806
 
804
807
  let hourlyData = lamdaAPIResultData.hourlyData || [];
805
808
  let hourlyChartImagePath = await overallHourlyChart( hourlyData );
806
-
809
+ // console.log( 'dayjs().format', dayjs().format );
807
810
  // Upload hourly chart
808
811
  const hourlyChartParams = {
809
- Bucket: bucketDetails.mailer,
810
- Key: `${dayjs().format( 'YYYY-MM-DD-HH:mm:ss' )}/mail/emailHourlyUserChart.png`,
812
+ Bucket: bucketDetails.emailers,
813
+ Key: `emailer/${templateData.clientId}/${dayjs().format( 'YYYY-MM-DD' )}/${templateData.templateId}/hourlyChart/${dayjs().unix()}.png`,
811
814
  ContentType: 'image/png',
812
815
  body: hourlyChartImagePath,
813
816
  };
@@ -815,16 +818,16 @@ async function hourlyChartLamdaAPI( templateData ) {
815
818
  const hourlyChartResponse = await fileUpload( hourlyChartParams );
816
819
  if ( hourlyChartResponse && hourlyChartResponse.Key ) {
817
820
  hourlyChartUrl = await signedUrl( {
818
- Bucket: bucketDetails.mailer,
821
+ Bucket: bucketDetails.emailers,
819
822
  file_path: hourlyChartResponse.Key,
820
823
  } );
821
824
  } else {
822
825
  throw new Error( 'S3 Upload failed for hourly chart' );
823
826
  }
824
- console.log( 'chartUrl hourlyChartLamdaAPI=>', hourlyChartUrl );
827
+ // console.log( 'chartUrl hourlyChartLamdaAPI=>', hourlyChartUrl );
825
828
  return hourlyChartUrl;
826
829
  } catch ( error ) {
827
- console.log( ' error hourlyChartLamdaAPI=>', error );
830
+ // console.log( ' error hourlyChartLamdaAPI=>', error );
828
831
  logger.error( { error: error, function: 'hourlyChartLamdaAPI' } );
829
832
  return false;
830
833
  }
@@ -855,26 +858,30 @@ async function dailyChartLamdaAPI( templateData ) {
855
858
  if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
856
859
  return chartUrl;
857
860
  }
861
+ // console.log( 'Unix timestamp:', dayjs().unix() );
858
862
 
859
863
  let dailyData = lamdaAPIResultData.storeData || [];
860
864
  let chartImagePath = await overallChart( dailyData );
865
+
861
866
  // Upload overall chart
862
867
  const overallChartParams = {
863
- Bucket: bucketDetails.mailer,
864
- Key: `${dayjs().format( 'YYYY-MM-DD-HH:mm:ss' )}/mail/emaildailyUserChart.png`,
868
+ Bucket: bucketDetails.emailers,
869
+ Key: `emailer/${templateData.clientId}/${dayjs().format( 'YYYY-MM-DD' )}/${templateData.templateId}/dailyChart/${dayjs().unix()}.png`,
870
+ // Key: `${dayjs().format( 'YYYY-MM-DD-HH:mm:ss' )}/mail/emaildailyUserChart.png`,
871
+ // ${templateData.templateType}
865
872
  ContentType: 'image/png',
866
873
  body: chartImagePath,
867
874
  };
868
875
  const overallChartResponse = await fileUpload( overallChartParams );
869
876
  if ( overallChartResponse && overallChartResponse.Key ) {
870
877
  chartUrl = await signedUrl( {
871
- Bucket: bucketDetails.mailer,
878
+ Bucket: bucketDetails.emailers,
872
879
  file_path: overallChartResponse.Key,
873
880
  } );
874
881
  } else {
875
882
  throw new Error( 'S3 Upload failed for overall chart' );
876
883
  }
877
- console.log( 'chartUrl dailyChartLamdaAPI=>', chartUrl );
884
+ // console.log( 'chartUrl dailyChartLamdaAPI=>', chartUrl );
878
885
  return chartUrl;
879
886
  } catch ( error ) {
880
887
  logger.error( { error: error, function: 'dailyChartLamdaAPI' } );
@@ -1031,6 +1038,7 @@ async function dailyFootfallTrendChartLamdaAPI( templateData ) {
1031
1038
  // return lamdaAPIResultData;
1032
1039
 
1033
1040
  let newTemplateData = templateData;
1041
+ // console.log( 'Template Data:', templateData );
1034
1042
  // newTemplateData.dateType = 'weekly';
1035
1043
  let processTypeValue = 'engagers';
1036
1044
  if ( templateData.featureConfigs.conversionCalculation !== 'engagers-count' ) {
@@ -1047,34 +1055,42 @@ async function dailyFootfallTrendChartLamdaAPI( templateData ) {
1047
1055
  newTemplateData.processType = processTypeValue;
1048
1056
  newTemplateData.limit = 31;
1049
1057
  newTemplateData.offset = 0;
1058
+ // console.log( 'newTemplateData', newTemplateData );
1050
1059
  const overallLamdaURL = 'https://x6sjlqwaqd64kyioxhwrwfesbm0jjitx.lambda-url.ap-south-1.on.aws/';
1051
1060
  let lamdaAPIResultData = await LamdaServiceCall( overallLamdaURL, newTemplateData );
1061
+ // console.log( 'lamdaAPIResultData =>', lamdaAPIResultData );
1052
1062
  if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
1053
1063
  return chartUrl;
1054
1064
  }
1055
1065
 
1056
1066
  let dailyData = lamdaAPIResultData.footfallTrendData || [];
1057
1067
  let chartImagePath = await footfallTrend( dailyData );
1068
+ // console.log( 'chartImagePath =>', chartImagePath );
1058
1069
  // Upload overall chart
1070
+ // console.log( 'Unix timestamp:', dayjs().unix() );
1059
1071
  const overallChartParams = {
1060
- Bucket: bucketDetails.mailer,
1061
- Key: `${dayjs().format( 'YYYY-MM-DD-HH:mm:ss' )}/mail/emailweeklyUserChart.png`,
1072
+ Bucket: bucketDetails.emailers,
1073
+ Key: `emailer/${templateData.clientId}/${dayjs().format( 'YYYY-MM-DD' )}/${templateData.templateId}/footfallTrendChart/${dayjs().unix()}.png`,
1074
+ // Key: `${dayjs().format( 'YYYY-MM-DD-HH:mm:ss' )}/mail/emailweeklyUserChart.png`,
1062
1075
  ContentType: 'image/png',
1063
1076
  body: chartImagePath,
1064
1077
  };
1078
+ // console.log( 'bucketDetails =>', bucketDetails.mailer );
1079
+ // console.log( 'overallChartParams =>', overallChartParams );
1065
1080
  const overallChartResponse = await fileUpload( overallChartParams );
1081
+ // console.log("overallChartResponse =>", overallChartResponse);
1066
1082
  if ( overallChartResponse && overallChartResponse.Key ) {
1067
1083
  chartUrl = await signedUrl( {
1068
- Bucket: bucketDetails.mailer,
1084
+ Bucket: bucketDetails.emailers,
1069
1085
  file_path: overallChartResponse.Key,
1070
1086
  } );
1071
1087
  } else {
1072
1088
  throw new Error( 'S3 Upload failed for overall chart' );
1073
1089
  }
1074
- console.log( 'chartUrl dailyFootfallTrendChartLamdaAPI=>', chartUrl );
1090
+ // console.log( 'chartUrl dailyFootfallTrendChartLamdaAPI=>', chartUrl );
1075
1091
  return chartUrl;
1076
1092
  } catch ( error ) {
1077
- console.log( 'error dailyFootfallTrendChartLamdaAPI=>', error );
1093
+ // console.log( 'error dailyFootfallTrendChartLamdaAPI=>', error );
1078
1094
  logger.error( { error: error, function: 'dailyFootfallTrendChartLamdaAPI' } );
1079
1095
  return false;
1080
1096
  }
@@ -1094,7 +1110,7 @@ async function getLamdaChartData( templateData ) {
1094
1110
  ] );
1095
1111
  resultLamdaChartData.dailyData = chartImagePath;
1096
1112
  resultLamdaChartData.hourlyData = hourlyChartImagePath;
1097
- console.log( 'resultLamdaChartData 555=>', resultLamdaChartData );
1113
+ // console.log( 'resultLamdaChartData 555=>', resultLamdaChartData );
1098
1114
  return resultLamdaChartData;
1099
1115
  } else {
1100
1116
  // Default Value
@@ -1102,7 +1118,7 @@ async function getLamdaChartData( templateData ) {
1102
1118
  return resultLamdaChartData;
1103
1119
  }
1104
1120
  } catch ( error ) {
1105
- console.log( 'error getLamdaChartData=>', error );
1121
+ // console.log( 'error getLamdaChartData=>', error );
1106
1122
  logger.error( { error: error, function: 'getLamdaChartData' } );
1107
1123
  return false;
1108
1124
  }
@@ -1167,7 +1183,7 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1167
1183
 
1168
1184
  // templateData.userEmail
1169
1185
  await sendEmailWithSES(
1170
- 'nafila@tangotech.co.in',
1186
+ 'keerthivasan@tangotech.co.in',
1171
1187
  subject,
1172
1188
  html,
1173
1189
  '',
@@ -1178,7 +1194,7 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1178
1194
 
1179
1195
  return true;
1180
1196
  } catch ( error ) {
1181
- console.log( 'error emailerSendEmail=>', error );
1197
+ // console.log( 'error emailerSendEmail=>', error );
1182
1198
  logger.error( { error: error, function: 'emailerSendEmail' } );
1183
1199
  return false;
1184
1200
  }
@@ -1190,7 +1206,11 @@ const overallChart = async ( data ) => {
1190
1206
  // let chartImagePath = path.resolve( __dirname, 'emailchart-image.png' );
1191
1207
  // console.log( 'Chart Image Path:', chartImagePath );
1192
1208
 
1193
- const browser = await puppeteer.launch( { headless: true } );
1209
+ // const browser = await puppeteer.launch( { headless: true } );
1210
+ const browser = await puppeteer.launch( {
1211
+ args: [ '--no-sandbox', '--disable-setuid-sandbox' ],
1212
+ headless: true,
1213
+ } );
1194
1214
  const page = await browser.newPage();
1195
1215
 
1196
1216
  const chartHtmlContent = `
@@ -1305,7 +1325,11 @@ const overallChart = async ( data ) => {
1305
1325
  const overallHourlyChart = async ( data ) => {
1306
1326
  console.log( 'Generating overallHourlyChart heatmap chart...' );
1307
1327
 
1308
- const browser = await puppeteer.launch( { headless: true } );
1328
+ // const browser = await puppeteer.launch( { headless: true } );
1329
+ const browser = await puppeteer.launch( {
1330
+ args: [ '--no-sandbox', '--disable-setuid-sandbox' ],
1331
+ headless: true,
1332
+ } );
1309
1333
  const page = await browser.newPage();
1310
1334
 
1311
1335
  const chartHtmlContent = `
@@ -1478,7 +1502,11 @@ const overallHourlyChart = async ( data ) => {
1478
1502
  const footfallTrend = async ( data ) => {
1479
1503
  console.log( 'Generating footfallTrend footfall chart...' );
1480
1504
 
1481
- const browser = await puppeteer.launch( { headless: true } );
1505
+ // const browser = await puppeteer.launch( { headless: true } );
1506
+ const browser = await puppeteer.launch( {
1507
+ args: [ '--no-sandbox', '--disable-setuid-sandbox' ],
1508
+ headless: true,
1509
+ } );
1482
1510
  const page = await browser.newPage();
1483
1511
 
1484
1512
  const chartHtmlContent = `
@@ -1682,7 +1710,7 @@ const footfallTrend = async ( data ) => {
1682
1710
  await page.waitForSelector( '#Footfalltrend', { visible: true } );
1683
1711
  weeklyChartBuffer = await page.screenshot( { encoding: 'binary' } );
1684
1712
  } catch ( err ) {
1685
- // console.error( 'Error generating chart screenshot:', err );
1713
+ // console.log( 'Error generating chart screenshot:', err );
1686
1714
  throw new Error( 'Failed to generate chart screenshot' );
1687
1715
  } finally {
1688
1716
  await browser.close();
@@ -554,11 +554,11 @@
554
554
  {{#eq data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgComparisonFlag true}}
555
555
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
556
556
  <p class="color-12b76a" width="33"
557
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
557
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
558
558
  {{data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgRate}}%</p>
559
559
  {{else}}
560
560
  <p class="color-f04438" width="33"
561
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
561
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
562
562
  {{data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgRate}}%
563
563
  </p>
564
564
  {{/eq}}
@@ -820,11 +820,11 @@
820
820
  {{#eq data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgComparisonFlag true}}
821
821
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
822
822
  <p class="color-12b76a" width="33"
823
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
823
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
824
824
  {{data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgRate}}%</p>
825
825
  {{else}}
826
826
  <p class="color-f04438" width="33"
827
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
827
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
828
828
  {{data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgRate}}%
829
829
  </p>
830
830
  {{/eq}}
@@ -1205,7 +1205,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
1205
1205
  <td style="width:12px; min-width:12px;" width="12">
1206
1206
  &#8202;</td>
1207
1207
  <td width="135">
1208
- <a href="https://apps.apple.com/in/app/tango-eye/id6733242555" target="_blank">
1208
+ <a href="https://play.google.com/store/apps/details?id=com.tangoeye.app" target="_blank">
1209
1209
  <img src="https://media.marka-img.com/74f52b1f/ytenrNp9D3aqdlyQQEJ9I9nbB9kMip.png"
1210
1210
  width="135" border="0"
1211
1211
  style="min-width:135px; width:135px; border-radius:5px; height: auto; display: block;">
@@ -417,12 +417,12 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
417
417
  <td valign="top" width="33" style="padding-left: 3px; width: 33px; vertical-align: top">
418
418
  {{#eq data.lamdaMetrics.emailerCards.footfall.vsMTDAvgComparisonFlag true}}
419
419
  <p class="color-12b76a" width="33"
420
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
420
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
421
421
  {{data.lamdaMetrics.emailerCards.footfall.vsMTDAvgRate}}%
422
422
  </p>
423
423
  {{else}}
424
424
  <p class="color-f04438" width="33"
425
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
425
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
426
426
  {{data.lamdaMetrics.emailerCards.footfall.vsMTDAvgRate}}%
427
427
  </p>
428
428
  {{/eq}}
@@ -944,7 +944,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
944
944
  <td style="width:12px; min-width:12px;" width="12">
945
945
  &#8202;</td>
946
946
  <td width="135">
947
- <a href="https://apps.apple.com/in/app/tango-eye/id6733242555"
947
+ <a href="https://play.google.com/store/apps/details?id=com.tangoeye.app"
948
948
  target="_blank">
949
949
  <img src="https://media.marka-img.com/74f52b1f/ytenrNp9D3aqdlyQQEJ9I9nbB9kMip.png"
950
950
  width="135" border="0"
@@ -430,10 +430,10 @@
430
430
  <td valign="top" width="33" style="padding-left: 3px; width: 33px; vertical-align: top">
431
431
  {{#eq data.lamdaMetrics.emailerCards.avgFootfall.lastWeekComparisonFlag true}}
432
432
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
433
- <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly"> {{data.lamdaMetrics.emailerCards.avgFootfall.lastWeekRate}}%</p>
433
+ <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly"> {{data.lamdaMetrics.emailerCards.avgFootfall.lastWeekRate}}%</p>
434
434
  {{else}}
435
435
  <p class="color-12b76a" width="33"
436
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
436
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
437
437
  {{data.lamdaMetrics.emailerCards.avgFootfall.lastWeekRate}}%</p>
438
438
  {{/eq}}
439
439
  <!--[if mso]></td></tr></table><![endif]-->
@@ -464,10 +464,10 @@
464
464
  <td valign="top" width="33" style="padding-left: 3px; width: 33px; vertical-align: top">
465
465
  {{#eq data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgComparisonFlag true}}
466
466
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
467
- <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">{{data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgRate}}%</p>
467
+ <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">{{data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgRate}}%</p>
468
468
  {{else}}
469
469
  <p class="color-f04438" width="33"
470
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
470
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
471
471
  {{data.lamdaMetrics.emailerCards.avgFootfall.vsMTDAvgRate}}%
472
472
  </p>
473
473
  {{/eq}}
@@ -546,11 +546,11 @@
546
546
  {{#eq data.lamdaMetrics.emailerCards.avgConversion.lastWeekComparisonFlag true}}
547
547
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
548
548
  <p class="color-12b76a" width="33"
549
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
549
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
550
550
  {{data.lamdaMetrics.emailerCards.avgConversion.lastWeekRate}}%</p>
551
551
  {{else}}
552
552
  <p class="color-12b76a" width="33"
553
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
553
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width:40px; line-height: 20px; mso-line-height-rule: exactly">
554
554
  {{data.lamdaMetrics.emailerCards.avgConversion.lastWeekRate}}%</p>
555
555
  {{/eq}}
556
556
  <!--[if mso]></td></tr></table><![endif]-->
@@ -589,11 +589,11 @@
589
589
  {{#eq data.lamdaMetrics.emailerCards.avgConversion.vsMTDAvgComparisonFlag true}}
590
590
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
591
591
  <p class="color-12b76a" width="33"
592
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
592
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
593
593
  {{data.lamdaMetrics.emailerCards.avgConversion.vsMTDAvgRate}}%</p>
594
594
  {{else}}
595
595
  <p class="color-f04438" width="33"
596
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
596
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
597
597
  {{data.lamdaMetrics.emailerCards.avgConversion.vsMTDAvgRate}}%
598
598
  </p>
599
599
  {{/eq}}
@@ -645,7 +645,7 @@
645
645
  <td valign="middle" style="vertical-align: middle">
646
646
  <p class="color-101828"
647
647
  style="font-size: 20px; font-weight: 700; color: #101828; margin: 0; padding: 0; line-height: 30px; mso-line-height-alt: normal">
648
- {{data.lamdaMetrics.emailerCards.avgDwellTime.dwellTime}} mins</p>
648
+ {{data.lamdaMetrics.emailerCards.avgDwellTime.totalCount}} mins</p>
649
649
  </td>
650
650
  <td valign="middle" style="padding-left: 6px; vertical-align: middle">
651
651
  <p class="color-344054"
@@ -681,11 +681,11 @@
681
681
  {{#eq data.lamdaMetrics.emailerCards.avgDwellTime.lastWeekComparisonFlag true}}
682
682
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
683
683
  <p class="color-12b76a" width="33"
684
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
684
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
685
685
  {{data.lamdaMetrics.emailerCards.avgDwellTime.lastWeekRate}}%</p>
686
686
  {{else}}
687
687
  <p class="color-12b76a" width="33"
688
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
688
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
689
689
  {{data.lamdaMetrics.emailerCards.avgDwellTime.lastWeekRate}}%</p>
690
690
  {{/eq}}
691
691
  <!--[if mso]></td></tr></table><![endif]-->
@@ -724,11 +724,11 @@
724
724
  {{#eq data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgComparisonFlag true}}
725
725
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
726
726
  <p class="color-12b76a" width="33"
727
- style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
727
+ style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
728
728
  {{data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgRate}}%</p>
729
729
  {{else}}
730
730
  <p class="color-f04438" width="33"
731
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
731
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 40px; line-height: 20px; mso-line-height-rule: exactly">
732
732
  {{data.lamdaMetrics.emailerCards.avgDwellTime.vsMTDAvgRate}}%
733
733
  </p>
734
734
  {{/eq}}
@@ -799,10 +799,10 @@
799
799
  <td valign="top" width="33" style="padding-left: 3px; width: 33px; vertical-align: top">
800
800
  {{#eq data.lamdaMetrics.emailerCards.avgOperationalHours.lastWeekComparisonFlag true}}
801
801
  <!--[if mso]> <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="33" style="width:33px;"> <tr> <td> <![endif]-->
802
- <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly"> {{data.lamdaMetrics.emailerCards.avgOperationalHours.lastWeekRate}}%</p>
802
+ <p class="color-12b76a" width="33" style="font-size: 14px; font-weight: 500; color: #12b76a; margin: 0; padding: 0; width: 42px; line-height: 20px; mso-line-height-rule: exactly"> {{data.lamdaMetrics.emailerCards.avgOperationalHours.lastWeekRate}}%</p>
803
803
  {{else}}
804
804
  <p class="color-12b76a" width="33"
805
- style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 33px; line-height: 20px; mso-line-height-rule: exactly">
805
+ style="font-size: 14px; font-weight: 500; color: #f04438; margin: 0; padding: 0; width: 42px; line-height: 20px; mso-line-height-rule: exactly">
806
806
  {{data.lamdaMetrics.emailerCards.avgOperationalHours.lastWeekRate}}%</p>
807
807
  {{/eq}}
808
808
  <!--[if mso]></td></tr></table><![endif]-->
@@ -1116,7 +1116,7 @@
1116
1116
  <td style="width:12px; min-width:12px;" width="12">
1117
1117
  &#8202;</td>
1118
1118
  <td width="135">
1119
- <a href="https://apps.apple.com/in/app/tango-eye/id6733242555"
1119
+ <a href="https://play.google.com/store/apps/details?id=com.tangoeye.app"
1120
1120
  target="_blank">
1121
1121
  <img src="https://media.marka-img.com/74f52b1f/ytenrNp9D3aqdlyQQEJ9I9nbB9kMip.png"
1122
1122
  width="135" border="0"
@@ -843,7 +843,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
843
843
  <td style="width:12px; min-width:12px;" width="12">
844
844
  &#8202;</td>
845
845
  <td width="135">
846
- <a href="https://apps.apple.com/in/app/tango-eye/id6733242555"
846
+ <a href="https://play.google.com/store/apps/details?id=com.tangoeye.app"
847
847
  target="_blank">
848
848
  <img src="https://media.marka-img.com/74f52b1f/ytenrNp9D3aqdlyQQEJ9I9nbB9kMip.png"
849
849
  width="135" border="0"