KieBuilder too much time to load kieFileSystem and build - performance

I have a Drools based application, which has 15-20 files overall. Each file has rules for a particular context. I load the file in session based on the context I want to invoke. Recently the number of executions increased a lot which was followed by latency degradation. I found that building KieBuilder is taking a long time, which grows proportionally to the number of requests on the application. Based on some research, it looks like all calls stop at the building step and continue when building is complete for all. I am not sure why this is happening since the calls are disconnected in the sense that all need different files to be loaded.
I found some references to KieBuilder taking too much time but couldn't find any solution.
Drools version being used: 7.4.1-Final
My code:
private StatelessKieSession loadSession(final String namespace, final String path) {
final KieServices kieServices = KieServices.Factory.get();
final KieResources kieResources = kieServices.getResources();
final KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
final InputStream ruleFile = ruleStore.getRulesForRuleId(namespace, path);
kieFileSystem.write(kieResources.newInputStreamResource(ruleFile)
.setSourcePath(DRL_PATH)
.setResourceType(ResourceType.DRL));
log.info("Creating KieBuilder for {}/{}", namespace, path);
final KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();
if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
throw new InvalidRulesException("Failed to load rules from S3 in "
+ "Drools engine with error: " + kieBuilder.getResults().toString());
}
log.info("Created KieBuilder for {}/{}", namespace, path);
final KieContainer kContainer = kieServices.newKieContainer(
kieServices.getRepository().getDefaultReleaseId());
return kContainer.newStatelessKieSession();
}
Line taking too long:
final KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();
Logs showing application is just waiting for 20 secs for KieBuilder :
(http-bio-0.0.0.0-8080-exec-95) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/CafeteriaTimings.drl
12 Jan 2021 10:36:10,904 (http-bio-0.0.0.0-8080-exec-92) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MandatoryOffDays.drl
12 Jan 2021 10:36:10,911 (http-bio-0.0.0.0-8080-exec-82) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/ConsecutiveOffDaysPerWeek.drl
12 Jan 2021 10:36:10,912 (http-bio-0.0.0.0-8080-exec-93) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerSiteWeek.drl
12 Jan 2021 10:36:10,916 (http-bio-0.0.0.0-8080-exec-53) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxTimeBetweenStartAndLunch.drl
12 Jan 2021 10:36:10,916 (http-bio-0.0.0.0-8080-exec-79) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerDay.drl
12 Jan 2021 10:36:10,922 (http-bio-0.0.0.0-8080-exec-97) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/BreakFrequency.drl
12 Jan 2021 10:36:10,924 (http-bio-0.0.0.0-8080-exec-86) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxTimeBetweenStartAndBreak.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-90) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/CanLunchExistOutsideCafeteriaTime.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-87) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/LunchDuration.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-94) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxConsecutiveDays.drl
12 Jan 2021 10:36:11,005 (http-bio-0.0.0.0-8080-exec-83) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/LunchFrequency.drl
12 Jan 2021 10:36:11,010 (http-bio-0.0.0.0-8080-exec-85) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinOffDaysPerWeek.drl
12 Jan 2021 10:36:11,015 (http-bio-0.0.0.0-8080-exec-88) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerWeek.drl
12 Jan 2021 10:36:11,017 (http-bio-0.0.0.0-8080-exec-84) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinWorkHoursBeforeLunch.drl
12 Jan 2021 10:36:11,018 (http-bio-0.0.0.0-8080-exec-96) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/BreakDuration.drl
12 Jan 2021 10:36:11,022 (http-bio-0.0.0.0-8080-exec-89) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/WorkIntervalsList.drl
12 Jan 2021 10:36:11,032 (http-bio-0.0.0.0-8080-exec-99) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:11,037 (http-bio-0.0.0.0-8080-exec-80) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinTimeBetweenStartAndBreak.drl
12 Jan 2021 10:36:11,104 (http-bio-0.0.0.0-8080-exec-78) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinConsecutiveOffWorkHours.drl
12 Jan 2021 10:36:11,108 (http-bio-0.0.0.0-8080-exec-81) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/DayValidationType.drl
12 Jan 2021 10:36:11,203 (http-bio-0.0.0.0-8080-exec-100) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:11,322 (http-bio-0.0.0.0-8080-exec-2) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:14,324 (http-bio-0.0.0.0-8080-exec-1) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:15,224 (http-bio-0.0.0.0-8080-exec-3) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,207 (http-bio-0.0.0.0-8080-exec-4) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,404 (http-bio-0.0.0.0-8080-exec-6) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,503 (http-bio-0.0.0.0-8080-exec-5) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:17,003 (http-bio-0.0.0.0-8080-exec-7) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:17,203 (http-bio-0.0.0.0-8080-exec-8) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:18,513 (http-bio-0.0.0.0-8080-exec-9) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,122 (http-bio-0.0.0.0-8080-exec-10) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,803 (http-bio-0.0.0.0-8080-exec-11) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,903 (http-bio-0.0.0.0-8080-exec-12) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,114 (http-bio-0.0.0.0-8080-exec-13) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,213 (http-bio-0.0.0.0-8080-exec-14) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,407 (http-bio-0.0.0.0-8080-exec-15) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,703 (http-bio-0.0.0.0-8080-exec-16) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,303 (http-bio-0.0.0.0-8080-exec-17) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,503 (http-bio-0.0.0.0-8080-exec-18) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,603 (http-bio-0.0.0.0-8080-exec-19) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,603 (http-bio-0.0.0.0-8080-exec-20) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:23,711 (MetricAggregationClientScheduled-1) com.amazon.aws.cloudwatch.extension.client.impl.MetricAggregationCloudWatchClient: flush is invoked with sync false
12 Jan 2021 10:36:24,308 (MetricAggregationClientPublisher-1) com.amazon.aws.cloudwatch.extension.client.impl.MetricAggregationCloudWatchClient: Stats after submit are {}
12 Jan 2021 10:36:24,905 (http-bio-0.0.0.0-8080-exec-21) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:25,703 (http-bio-0.0.0.0-8080-exec-22) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,518 (http-bio-0.0.0.0-8080-exec-23) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,603 (http-bio-0.0.0.0-8080-exec-24) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,903 (http-bio-0.0.0.0-8080-exec-25) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:27,218 (http-bio-0.0.0.0-8080-exec-26) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:27,403 (http-bio-0.0.0.0-8080-exec-27) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:28,803 (http-bio-0.0.0.0-8080-exec-28) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:29,503 (http-bio-0.0.0.0-8080-exec-29) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:29,903 (http-bio-0.0.0.0-8080-exec-30) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:30,129 (http-bio-0.0.0.0-8080-exec-31) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:30,803 (http-bio-0.0.0.0-8080-exec-32) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:31,819 (http-bio-0.0.0.0-8080-exec-34) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:31,902 (http-bio-0.0.0.0-8080-exec-33) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,103 (http-bio-0.0.0.0-8080-exec-35) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,203 (http-bio-0.0.0.0-8080-exec-36) org.jboss.resteasy.core.SynchronousDispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,219 (http-bio-0.0.0.0-8080-exec-90) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl54:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:32,322 (http-bio-0.0.0.0-8080-exec-90) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/CanLunchExistOutsideCafeteriaTime.drl
12 Jan 2021 10:36:32,613 (http-bio-0.0.0.0-8080-exec-82) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl80:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:32,613 (http-bio-0.0.0.0-8080-exec-82) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/ConsecutiveOffDaysPerWeek.drl
12 Jan 2021 10:36:33,913 (http-bio-0.0.0.0-8080-exec-79) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl76:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:33,913 (http-bio-0.0.0.0-8080-exec-79) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerDay.drl
12 Jan 2021 10:36:34,205 (http-bio-0.0.0.0-8080-exec-92) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl0:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,205 (http-bio-0.0.0.0-8080-exec-92) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MandatoryOffDays.drl
12 Jan 2021 10:36:34,210 (http-bio-0.0.0.0-8080-exec-95) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl92:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,210 (http-bio-0.0.0.0-8080-exec-95) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/CafeteriaTimings.drl
12 Jan 2021 10:36:34,608 (http-bio-0.0.0.0-8080-exec-81) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl31:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,609 (http-bio-0.0.0.0-8080-exec-81) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/DayValidationType.drl
12 Jan 2021 10:36:34,615 (http-bio-0.0.0.0-8080-exec-85) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl8:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,615 (http-bio-0.0.0.0-8080-exec-85) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MinOffDaysPerWeek.drl
12 Jan 2021 10:36:34,716 (http-bio-0.0.0.0-8080-exec-87) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl79:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,716 (http-bio-0.0.0.0-8080-exec-87) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/LunchDuration.drl
12 Jan 2021 10:36:35,218 (http-bio-0.0.0.0-8080-exec-94) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl94:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:35,218 (http-bio-0.0.0.0-8080-exec-94) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MaxConsecutiveDays.drl
I am looking to understand why the time taken for KieBuilder is proportional to the number of calls, and for a way to optimize on the time taken.
Thanks!

Related

RFC822 Date format in Golang

Why Golang time format (RFC-822 in this case) is different from the one described in the RFC?
In time package RFC822 const value is defined as:
RFC822 = "02 Jan 06 15:04 MST"
11 Nov 09 00:00 CET
But regarding to RFC-822 or w3.org Validator date format should be rather as RFC1123:
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
Wed, 11 Nov 2009 00:00:00 CET
or even better:
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700"
Wed, 11 Nov 2009 00:00:00 +0100
Because the Central European Time Zone (CET) is not correct in this RFC.
Why such a difference?
I'm writing an RSS server and it took me a while to figure out why I'm getting badly formatted results.

How should I load resources from src/main/resources in Kotlin?

I'm working on a Spring Boot application written in Kotlin (using Maven), and everything works fine but after generating the jar of my application, it throws an Exception because it can't find the folder src/main/resources:
Caused by: java.io.FileNotFoundException: src\main\resources\data\circuits-arrets.json
I read that could be because I use File class, and it doesn't work properly after generating the jar. Here's how I read my file:
var line: String?
val bufferedReader = BufferedReader(FileReader(File(csvLocation)))
do {
line = bufferedReader.readLine()
if (line != null) {
//Do something with 'line'
}
} while (line != null)
I found some solutions using InputStream instead of File in the BufferedReader.
My question is: Does it really change something for the jar? If yes, how should I do then?
Thank you in advance.
EDIT:
Here's the output of the command jar tvf my-jar.jar :
0 Fri Feb 15 10:34:14 CET 2019 META-INF/
552 Fri Feb 15 10:34:14 CET 2019 META-INF/MANIFEST.MF
0 Fri Feb 15 10:34:14 CET 2019 org/
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/loader/
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/loader/data/
2688 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/loader/jar/
9736 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarURLConnection.class
1374 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFile$JarFileType.class
14915 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFile.class
3414 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarEntry.class
345 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/FileHeader.class
3172 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/StringSequence.class
4976 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/AsciiBytes.class
1593 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFileEntries$1.class
1997 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class
10728 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFileEntries.class
540 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/CentralDirectoryVisitor.class
299 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarEntryFilter.class
5267 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class
3116 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class
4624 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/CentralDirectoryParser.class
1693 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/ZipInflaterInputStream.class
11509 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/Handler.class
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/loader/archive/
302 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/Archive$Entry.class
437 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/Archive$EntryFilter.class
945 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/Archive.class
1487 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator$EntryComparator.class
3837 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator.class
5243 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/ExplodedArchive.class
1484 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class
19737 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/PropertiesLauncher.class
282 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/data/RandomAccessDataFile$1.class
2062 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFile$1.class
1233 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarFile$2.class
3263 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class
4015 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/data/RandomAccessDataFile.class
1102 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class
1081 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class
7336 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/JarFileArchive.class
1502 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/MainMethodRunner.class
3608 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/ExecutableArchiveLauncher.class
0 Fri Feb 15 10:34:14 CET 2019 org/springframework/boot/loader/util/
5203 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/util/SystemPropertyUtils.class
485 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/data/RandomAccessData.class
273 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/ExplodedArchive$1.class
1779 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class
1953 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class
266 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/PropertiesLauncher$1.class
4684 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/Launcher.class
1721 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/WarLauncher.class
1585 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/JarLauncher.class
1527 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
5687 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/LaunchedURLClassLoader.class
616 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/Bytes.class
702 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarURLConnection$1.class
4306 Wed May 09 13:32:20 CEST 2018 org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class
0 Fri Feb 15 10:34:14 CET 2019 BOOT-INF/
0 Fri Feb 15 10:34:14 CET 2019 BOOT-INF/classes/
0 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/constants/
0 Fri Feb 15 10:33:50 CET 2019 BOOT-INF/classes/data/
0 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/
0 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/entities/
0 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/jsonEntities/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/entities/viewModels/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/repositories/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/security/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/services/
0 Fri Feb 15 10:34:10 CET 2019 BOOT-INF/classes/fr/asi/utils/
0 Fri Feb 15 10:34:12 CET 2019 META-INF/maven/
0 Fri Feb 15 10:34:12 CET 2019 META-INF/maven/com.auth0.samples/
0 Fri Feb 15 10:34:12 CET 2019 META-INF/maven/com.auth0.samples/kotlin-spring-boot/
584 Fri Feb 15 10:33:50 CET 2019 BOOT-INF/classes/application.properties
87499 Fri Feb 15 10:33:50 CET 2019 BOOT-INF/classes/data/circuits-arrets.json
261015 Fri Feb 15 10:33:50 CET 2019 BOOT-INF/classes/data/tan-arrets.csv
1029 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/Configuration.class
3471 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/ApplicationUserController.class
6013 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/BaseController.class
1701 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/BikeStationController.class
1692 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/BusStationController.class
612 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/FavoriteController$WhenMappings.class
5385 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/FavoriteController.class
1778 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/LineController.class
7389 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/controllers/StationController.class
1868 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/entities/jsonEntities/Arret.class
1079 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/entities/jsonEntities/BusLineLibelle.class
3252 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/ApplicationUser.class
2977 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/BikeStation.class
2140 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/Favorite.class
2981 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/Station.class
1195 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/entities/viewModels/BaseVM.class
3691 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/entities/viewModels/StationVM.class
1663 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/KotlinSpringBootApplicationKt.class
812 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/repositories/BaseRepository.class
702 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/repositories/BusStationRepository.class
672 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/repositories/LineRepository.class
5530 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/security/JWTAuthenticationFilter.class
2578 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/security/UserDetailsServiceImpl.class
4617 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/services/BaseService.class
1186 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/services/LineService.class
5525 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/StartingDataInjector.class
7943 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/utils/ParsersKt.class
121 Fri Feb 15 10:34:08 CET 2019 META-INF/kotlin-spring-boot.kotlin_module
7216 Fri Feb 15 10:31:38 CET 2019 META-INF/maven/com.auth0.samples/kotlin-spring-boot/pom.xml
1693 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/constants/ConstantsKt.class
1805 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/AccessCondition.class
1065 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/BaseEntity.class
3506 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/BusStation.class
1434 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/FavoriteType.class
2945 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/Line.class
2056 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/entities/mainEntities/StationType.class
2081 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/entities/viewModels/LineVM.class
613 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/KotlinSpringBootApplication.class
1101 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/repositories/ApplicationUserRepository.class
707 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/repositories/BikeStationRepository.class
692 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/repositories/FavoriteRepository.class
687 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/repositories/StationRepository.class
4738 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/security/JWTAuthorizationFilter.class
6776 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/security/WebSecurity.class
1235 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/services/BikeStationService.class
1228 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/services/BusStationService.class
1207 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/services/StationService.class
2405 Fri Feb 15 10:34:06 CET 2019 BOOT-INF/classes/fr/asi/utils/FindersKt.class
5205 Fri Feb 15 10:34:08 CET 2019 BOOT-INF/classes/fr/asi/VMUtils.class
114 Fri Feb 15 10:34:12 CET 2019 META-INF/maven/com.auth0.samples/kotlin-spring-boot/pom.properties
29487 Fri Feb 15 10:33:50 CET 2019 BOOT-INF/classes/data/stations-velos-libre-service-nantes-metropole.csv
0 Fri Feb 15 10:34:14 CET 2019 BOOT-INF/lib/
628 Wed May 09 13:41:28 CEST 2018 BOOT-INF/lib/spring-boot-starter-data-jpa-2.0.2.RELEASE.jar
593 Wed May 09 13:30:56 CEST 2018 BOOT-INF/lib/spring-boot-starter-2.0.2.RELEASE.jar
927496 Wed May 09 13:19:02 CEST 2018 BOOT-INF/lib/spring-boot-2.0.2.RELEASE.jar
1161361 Wed May 09 13:25:34 CEST 2018 BOOT-INF/lib/spring-boot-autoconfigure-2.0.2.RELEASE.jar
613 Wed May 09 13:30:56 CEST 2018 BOOT-INF/lib/spring-boot-starter-logging-2.0.2.RELEASE.jar
290339 Fri Mar 31 21:27:54 CEST 2017 BOOT-INF/lib/logback-classic-1.2.3.jar
471901 Fri Mar 31 21:27:16 CEST 2017 BOOT-INF/lib/logback-core-1.2.3.jar
17519 Sun Nov 19 01:08:44 CET 2017 BOOT-INF/lib/log4j-to-slf4j-2.10.0.jar
255485 Sun Nov 19 00:48:58 CET 2017 BOOT-INF/lib/log4j-api-2.10.0.jar
4596 Thu Mar 16 17:37:48 CET 2017 BOOT-INF/lib/jul-to-slf4j-1.7.25.jar
26586 Wed Feb 21 15:54:16 CET 2018 BOOT-INF/lib/javax.annotation-api-1.3.2.jar
297518 Sat Oct 14 11:44:44 CEST 2017 BOOT-INF/lib/snakeyaml-1.19.jar
600 Wed May 09 13:41:20 CEST 2018 BOOT-INF/lib/spring-boot-starter-aop-2.0.2.RELEASE.jar
1930381 Wed Nov 15 11:26:54 CET 2017 BOOT-INF/lib/aspectjweaver-1.8.13.jar
598 Wed May 09 13:41:22 CEST 2018 BOOT-INF/lib/spring-boot-starter-jdbc-2.0.2.RELEASE.jar
143471 Thu Apr 05 17:30:38 CEST 2018 BOOT-INF/lib/HikariCP-2.7.9.jar
401279 Tue May 08 08:06:44 CEST 2018 BOOT-INF/lib/spring-jdbc-5.0.6.RELEASE.jar
6739203 Thu Apr 26 11:06:04 CEST 2018 BOOT-INF/lib/hibernate-core-5.2.17.Final.jar
66469 Wed Feb 14 13:23:28 CET 2018 BOOT-INF/lib/jboss-logging-3.3.2.Final.jar
113371 Fri Jul 26 12:01:34 CEST 2013 BOOT-INF/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar
739582 Tue Oct 10 18:04:58 CEST 2017 BOOT-INF/lib/javassist-3.22.0-GA.jar
445288 Wed Sep 06 11:15:06 CEST 2006 BOOT-INF/lib/antlr-2.7.7.jar
186741 Tue Aug 02 13:41:56 CEST 2016 BOOT-INF/lib/jandex-2.0.3.Final.jar
65100 Sat Sep 09 14:47:28 CEST 2017 BOOT-INF/lib/classmate-1.3.4.jar
313898 Mon May 16 14:19:12 CEST 2005 BOOT-INF/lib/dom4j-1.6.1.jar
75288 Tue Nov 24 15:03:08 CET 2015 BOOT-INF/lib/hibernate-commons-annotations-5.0.1.Final.jar
30724 Mon May 13 15:11:34 CEST 2013 BOOT-INF/lib/javax.transaction-api-1.2.jar
335660 Tue May 08 14:29:02 CEST 2018 BOOT-INF/lib/spring-data-jpa-2.0.7.RELEASE.jar
1076871 Tue May 08 14:23:50 CEST 2018 BOOT-INF/lib/spring-data-commons-2.0.7.RELEASE.jar
191789 Tue May 08 08:07:28 CEST 2018 BOOT-INF/lib/spring-orm-5.0.6.RELEASE.jar
255201 Tue May 08 08:06:38 CEST 2018 BOOT-INF/lib/spring-tx-5.0.6.RELEASE.jar
41203 Thu Mar 16 17:36:32 CET 2017 BOOT-INF/lib/slf4j-api-1.7.25.jar
46745 Tue May 08 08:08:48 CEST 2018 BOOT-INF/lib/spring-aspects-5.0.6.RELEASE.jar
588 Wed May 09 13:41:32 CEST 2018 BOOT-INF/lib/spring-boot-starter-web-2.0.2.RELEASE.jar
645 Wed May 09 13:41:30 CEST 2018 BOOT-INF/lib/spring-boot-starter-json-2.0.2.RELEASE.jar
33392 Mon Mar 26 15:55:48 CEST 2018 BOOT-INF/lib/jackson-datatype-jdk8-2.9.5.jar
99630 Mon Mar 26 15:56:26 CEST 2018 BOOT-INF/lib/jackson-datatype-jsr310-2.9.5.jar
8646 Mon Mar 26 15:54:04 CEST 2018 BOOT-INF/lib/jackson-module-parameter-names-2.9.5.jar
591 Wed May 09 13:41:32 CEST 2018 BOOT-INF/lib/spring-boot-starter-tomcat-2.0.2.RELEASE.jar
3115994 Fri Apr 27 21:24:52 CEST 2018 BOOT-INF/lib/tomcat-embed-core-8.5.31.jar
240244 Fri Apr 27 21:24:54 CEST 2018 BOOT-INF/lib/tomcat-embed-el-8.5.31.jar
256776 Fri Apr 27 21:24:54 CEST 2018 BOOT-INF/lib/tomcat-embed-websocket-8.5.31.jar
1130724 Tue Mar 27 09:03:18 CEST 2018 BOOT-INF/lib/hibernate-validator-6.0.9.Final.jar
93107 Tue Dec 19 16:23:28 CET 2017 BOOT-INF/lib/validation-api-2.0.1.Final.jar
1254097 Tue May 08 08:07:04 CEST 2018 BOOT-INF/lib/spring-web-5.0.6.RELEASE.jar
789889 Tue May 08 08:07:52 CEST 2018 BOOT-INF/lib/spring-webmvc-5.0.6.RELEASE.jar
604 Wed May 09 13:41:42 CEST 2018 BOOT-INF/lib/spring-boot-starter-security-2.0.2.RELEASE.jar
366299 Tue May 08 08:06:20 CEST 2018 BOOT-INF/lib/spring-aop-5.0.6.RELEASE.jar
691611 Tue May 08 15:25:12 CEST 2018 BOOT-INF/lib/spring-security-config-5.0.5.RELEASE.jar
494788 Tue May 08 15:24:48 CEST 2018 BOOT-INF/lib/spring-security-web-5.0.5.RELEASE.jar
72603 Thu Jan 10 22:41:24 CET 2019 BOOT-INF/lib/spring-security-crypto-5.1.3.RELEASE.jar
433210 Thu Jan 10 22:41:26 CET 2019 BOOT-INF/lib/spring-security-core-5.1.3.RELEASE.jar
660573 Tue May 08 08:06:02 CEST 2018 BOOT-INF/lib/spring-beans-5.0.6.RELEASE.jar
1090735 Tue May 08 08:06:32 CEST 2018 BOOT-INF/lib/spring-context-5.0.6.RELEASE.jar
1226584 Tue May 08 08:05:54 CEST 2018 BOOT-INF/lib/spring-core-5.0.6.RELEASE.jar
21704 Tue May 08 08:05:42 CEST 2018 BOOT-INF/lib/spring-jcl-5.0.6.RELEASE.jar
279878 Tue May 08 08:06:20 CEST 2018 BOOT-INF/lib/spring-expression-5.0.6.RELEASE.jar
13769 Tue Nov 13 13:35:54 CET 2018 BOOT-INF/lib/kotlin-stdlib-jdk8-1.3.10.jar
1181292 Tue Nov 13 13:25:52 CET 2018 BOOT-INF/lib/kotlin-stdlib-1.3.10.jar
151024 Tue Nov 13 13:24:28 CET 2018 BOOT-INF/lib/kotlin-stdlib-common-1.3.10.jar
17536 Tue Dec 17 16:10:34 CET 2013 BOOT-INF/lib/annotations-13.0.jar
3137 Tue Nov 13 13:35:52 CET 2018 BOOT-INF/lib/kotlin-stdlib-jdk7-1.3.10.jar
2645740 Tue Nov 13 13:33:06 CET 2018 BOOT-INF/lib/kotlin-reflect-1.3.10.jar
501860 Wed Aug 15 21:36:52 CEST 2018 BOOT-INF/lib/commons-lang3-3.8.jar
127509 Fri Aug 04 15:17:50 CEST 2017 BOOT-INF/lib/javax.ws.rs-api-2.1.jar
164361 Sun Dec 23 12:30:54 CET 2018 BOOT-INF/lib/klaxon-5.0.1.jar
50732 Thu Jan 03 15:45:18 CET 2019 BOOT-INF/lib/java-jwt-3.5.0.jar
1342410 Mon Mar 26 15:13:56 CEST 2018 BOOT-INF/lib/jackson-databind-2.9.5.jar
66519 Sat Jul 29 20:53:26 CEST 2017 BOOT-INF/lib/jackson-annotations-2.9.0.jar
321590 Mon Mar 26 08:04:00 CEST 2018 BOOT-INF/lib/jackson-core-2.9.5.jar
335042 Tue Oct 17 08:53:20 CEST 2017 BOOT-INF/lib/commons-codec-1.11.jar
1007502 Tue Aug 07 08:59:10 CEST 2018 BOOT-INF/lib/mysql-connector-java-5.1.47.jar
I finally solved the problem. I don't if know using the BufferedReader is still the best practice, but I decided to keep it in my code as everything was done with it already. So I dropped the use of File class, and I used the following to get a resource from src/main/resources:
var line: String?
val bufferedReader = BufferedReader(InputStreamReader(Thread.currentThread().contextClassLoader.getResourceAsStream(csvLocation)))
do {
line = bufferedReader.readLine()
if (line != null) {
//Do something with 'line'
}
} while (line != null)
csvLocation value is "data/myFile.csv". This file is located in src/main/resources/data
Finally this solution works in my IDE and in the generated jar. Problem solved.
The production app will not run in your IDE, right? So that is of lesser importance than finding where the file exists on the classpath.
Essentially, there is no src/main/resources dir in the jar file - that directory is just a Maven convention for holding resources in a project. If you crack the jar and find the files in question, you'll understand better where Maven puts those files at package time and how to access them. Also note, a Maven-aware IDE will put files in src/main/resources on the app classpath, so the app will likely run in the IDE as well once the correct solution is identified.
To access the application.properties file in the example, use getResource or getResourceAsStream as suggested, with path /BOOT-INF/classes/application.properties. Note the first slash.

Need to take only one entry pertaining to particular name as in first column and iterate over the file

I have a file called Files1 which has below data, where i Need to take only the line (entire line) which has all the column entries (ie $1...to ..$12) and iterate over the file..
example: for name "testvnc02" it should only print below line as it has all the fields of its name and ignore rest of the line and take another name and do the same.
testvnc02 out: anders pts/83 192.168.87.1 Mon Feb 20
00:31 - 01:04 00:33
[testvnc02 ] out:
[testvnc02 ] out:
[testvnc02 ] out:
testvnc02 out:
testvnc02 out: anders pts/83 192.168.87.1 Mon Feb 20 00:31 - 01:04 00:33
testvnc02 out: curtist pts/1927 192.202.45.84 Thu Feb 9 17:54 - 19:55 02:00
testvnc02 out: curtist pts/1928 :32.0 Thu Feb 9 17:56 still logged in
testvnc02 out: echolu pts/82 :13 Tue Feb 14 01:07 still logged in
testvnc02 out: echolu pts/83 :13.0 Tue Feb 14 01:08 - 01:23 3+00:14
testvnc02 out: garimas pts/71 test-garimas.caden Fri Feb 17 02:22 - 03:23 01:01
testvnc02 out: garimas pts/71 test-garimas.caden Sun Feb 12 22:54 - 00:04 01:09
testvnc02 out: garimas pts/83 test-garimas.caden Mon Feb 20 01:39 - 02:39 01:00
testvnc02 out: garimas pts/84 test-garimas.caden Tue Feb 14 04:46 - 05:48 01:01
testvnc02 out: hjyu pts/87 testvnc02:28.0 Wed Feb 8 16:30 still logged in
testvnc02 out: hongshaw pts/17 192.168.222.27 Tue Feb 7 21:39 - 03:52 06:13
testvnc02 out: npitla pts/4 :4.0 Fri Feb 192 00:55 - 07:30 2+06:35
testvnc02 out: npitla pts/4 :4.0 Sun Feb 12 07:30 - 22:54 3+15:24
testvnc02 out: npitla pts/4 :4.0 Tue Feb 7 21:36 - 00:55 2+03:18
testvnc02 out: npitla pts/71 :4.0 Fri Feb 192 02:49 - 03:36 00:47
testvnc02 out: npitla pts/71 :4.0 Mon Feb 13 09:58 - 22:54 2+12:55
testvnc02 out: npitla pts/71 :4.0 Sun Feb 12 07:21 - 07:25 00:03
testvnc02 out: npitla pts/71 :4.0 Tue Feb 7 22:20 - 01:30 2+03:192
testvnc02 out: npitla pts/81 :4.0 Fri Feb 192 03:24 - 03:36 00:12
testvnc02 out: npitla pts/81 :4.0 Mon Feb 13 192:02 - 22:53 2+12:51
testvnc02 out: npitla pts/81 :4.0 Tue Feb 7 22:21 - 01:30 2+03:09
testvnc02 out: npitla pts/84 :4.0 Fri Feb 192 03:32 - 03:36 00:03
testvnc02 out: npitla pts/84 :4.0 Wed Feb 8 09:24 - 00:54 1+15:30
testvnc02 out: pedro pts/89 testvcut07.perence Wed Feb 15 01:41 - 01:50 00:09
testvnc02 out: pedro pts/89 testvcut07.perence Wed Feb 15 01:52 - 01:55 00:02
testvnc02 out: ruizh pts/89 szlnx4.perence.c Wed Feb 15 21:09 - 21:55 3+00:46
testvnc02 out: sbrahma pts/71 test-sbrahma.caden Fri Feb 17 14:46 - 14:53 00:06
testvnc02 out: sonamt pts/85 test-sonamt.caden Wed Feb 8 22:21 - 23:41 01:19
testvnc02 out: sungsikh pts/1927 :29.0 Thu Feb 9 16:13 - 16:19 00:06
testvnc02 out: sungsikh pts/4 :29.0 Thu Feb 16 12:55 still logged in
testvnc02 out: tao1wang pts/1920 :31 Thu Feb 9 192:19 still logged in
testvnc02 out: tao1wang pts/1921 :31 Thu Feb 9 192:19 still logged in
testvnc02 out: tao1wang pts/1922 :31 Thu Feb 9 192:20 still logged in
testvnc02 out: tao1wang pts/1923 :31 Thu Feb 9 192:20 still logged in
testvnc02 out: tao1wang pts/1924 :31 Thu Feb 9 192:20 still logged in
testvnc02 out: tao1wang pts/1925 :31 Thu Feb 9 192:21 still logged in
testvnc02 out: tao1wang pts/85 192.168.12.43 Thu Feb 9 08:59 - 09:22 00:23
testvnc02 out: tao1wang pts/85 :31 Thu Feb 9 192:17 still logged in
testvnc02 out: tao1wang pts/90 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/91 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/92 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/93 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/94 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/95 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/96 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/97 :31 Thu Feb 9 09:00 still logged in
testvnc02 out: tao1wang pts/98 :31 Thu Feb 9 192:18 still logged in
testvnc02 out: tao1wang pts/99 :31 Thu Feb 9 192:18 still logged in
testvnc02 out: vsanjay pts/71 :12 Sun Feb 19 23:06 still logged in
testvnc02 out: vsanjay pts/81 :12 Sun Feb 19 23:06 still logged in
testvnc02 out: vsanjay pts/88 :12 Wed Feb 15 01:30 still logged in
testvnc02 out: yulizhu pts/0 :14.0 Wed Feb 8 09:192 - 11:50 02:40
testvnc02 out: yulizhu pts/0 :14.0 Wed Feb 8 11:50 - 12:192 00:19
testvnc02 out: yulizhu pts/1926 :14.0 Thu Feb 9 11:04 - 17:38 5+06:33
testvnc02 out: yulizhu pts/17 :14.0 Wed Feb 8 09:11 - 09:12 00:01
testvnc02 out: yulizhu pts/58 :14.0 Wed Feb 8 09:13 - 11:49 02:36
testvnc02 out: yulizhu pts/71 :14.0 Fri Feb 192 12:50 - 12:52 00:01
testvnc02 out: yulizhu pts/71 :14.0 Fri Feb 192 13:25 - 13:27 00:02
testvnc02 out: yulizhu pts/84 :14.0 Tue Feb 14 17:38 - 19:11 01:33
testvnc02 out: yulizhu pts/84 :14.0 Tue Feb 14 19:18 still logged in
testvnc02 out: yulizhu pts/85 :14.0 Wed Feb 8 11:49 - 16:20 04:31
testvnc02 out: yulizhu pts/85 :14.0 Wed Feb 8 16:20 - 18:31 02:192
testvnc02 out: yulizhu pts/87 :14.0 Wed Feb 8 12:12 - 14:20 02:08
testvnc02 out: yulizhu pts/87 :14.0 Wed Feb 8 14:20 - 16:20 01:59
testvnc02 out: yulizhu pts/88 :14.0 Thu Feb 9 11:46 - 22:05 192:19
testvnc02 out: yulizhu pts/88 :14.0 Tue Feb 14 18:21 - 19:26 01:04
testvnc02 out: yulizhu pts/88 :14.0 Wed Feb 8 16:03 - 16:192 00:07
testvnc02 out: yulizhu pts/88 :14.0 Wed Feb 8 16:19 - 16:20 00:01
testvnc02 out: yulizhu pts/88 :14.0 Wed Feb 8 17:12 - 11:04 17:52
testvnc02 out: yulizhu pts/89 :14.0 Wed Feb 8 18:27 - 17:38 5+23:11
[testvnc04] out:
[testvnc04] out:
testvnc04 out: amitv pts/22 textnntv.cadenc Mon Feb 20 02:14 - 03:14 01:00
testvnc04 out: amitv pts/27 textnntv.cadenc Sun Feb 12 20:55 - 21:56 01:00
testvnc04 out: amitv pts/50 textnntv.cadenc Thu Feb 16 09:29 - 192:29 01:00
testvnc04 out: amitv pts/50 textnntv.cadenc Tue Feb 14 21:55 - 22:55 01:00
testvnc04 out: amyluo pts/22 192.16833.221.89 Sun Feb 19 21:42 - 22:53 01:192
testvnc04 out: amyluo pts/23 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: amyluo pts/24 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: amyluo pts/25 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: amyluo pts/26 :3.0 Sun Feb 12 01:01 - 21:41 7+20:39
testvnc04 out: amyluo pts/26 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: amyluo pts/56 192.16833.221.89 Sun Feb 19 21:40 - 21:41 00:01
testvnc04 out: amyluo pts/56 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: amyluo pts/57 :3.0 Sun Feb 19 21:43 still logged in
testvnc04 out: dclor pts/27 192.202.45.91 Sun Feb 12 16:42 - 17:43 01:00
testvnc04 out: dclor pts/28 :4 Sun Feb 12 16:43 still logged in
testvnc04 out: dclor pts/29 :4 Sun Feb 12 16:43 still logged in
testvnc04 out: dclor pts/49 :4 Mon Feb 13 17:13 still logged in
testvnc04 out: dclor pts/51 :4 Tue Feb 14 08:32 still logged in
testvnc04 out: dclor pts/9 :4 Mon Feb 20 13:28 still logged in
testvnc04 out: horeftis pts/48 test-horeftis.cade Mon Feb 13 14:42 - 14:44 00:01
testvnc04 out: jinyi pts/27 192.16833.2192.16828 Sun Feb 12 18:36 - 18:44 00:07
testvnc04 out: jinyi pts/30 :5.0 Sun Feb 12 18:40 still logged in
testvnc04 out: joao pts/22 test-joao.perence. Mon Feb 20 04:57 still logged in
testvnc04 out: joao pts/9 :52.0 Tue Feb 14 04:29 - 06:15 01:45
testvnc04 out: joao pts/9 :52.0 Tue Feb 14 06:15 - 02:01 19:46
testvnc04 out: joao pts/9 :52.0 Wed Feb 15 02:01 - 04:58 5+02:56
testvnc04 out: jolinr pts/50 testfib240.perence Tue Feb 14 17:54 - 18:05 00:192
testvnc04 out: jolinr pts/52 :6.0 Tue Feb 14 17:56 still logged in
testvnc04 out: jolinr pts/53 :6 Tue Feb 14 17:56 still logged in
testvnc04 out: jolinr pts/56 :6 Thu Feb 16 18:08 - 18:44 00:36
testvnc04 out: jolinr pts/57 :6 Thu Feb 16 18:11 - 18:44 00:33
testvnc04 out: jolinr pts/58 :6 Thu Feb 16 18:20 - 18:44 00:23
testvnc04 out: jolinr pts/59 :6 Thu Feb 16 18:22 - 18:44 00:22
testvnc04 out: jxie pts/22 vm1lnx3.perence. Mon Feb 20 00:27 - 00:42 00:15
testvnc04 out: jxie pts/56 vm1lnx3.perence. Fri Feb 17 01:52 - 04:08 02:16
testvnc04 out: jxie pts/56 vm1lnx3.perence. Fri Feb 17 08:57 - 09:27 00:29
testvnc04 out: jxie pts/56 vm1lnx3.perence. Fri Feb 17 192:19 - 11:41 01:21
testvnc04 out: jxie pts/56 vm1lnx3.perence. Fri Feb 17 21:59 - 23:00 01:00
testvnc04 out: jxie pts/56 vm1lnx3.perence. Sat Feb 18 01:36 - 01:45 00:09
testvnc04 out: jxie pts/56 vm1lnx3.perence. Sat Feb 18 06:41 - 11:17 04:36
testvnc04 out: jxie pts/56 vm1lnx3.perence. Sun Feb 19 18:53 - 19:56 01:03
testvnc04 out: jxie pts/56 vm1lnx3.perence. Thu Feb 16 21:37 - 00:15 02:38
testvnc04 out: jxie pts/57 vm1lnx3.perence. Fri Feb 17 09:04 - 09:27 00:22
testvnc04 out: jxie pts/57 vm1lnx3.perence. Sat Feb 18 06:44 - 192:18 03:33
testvnc04 out: jxie pts/58 vm1lnx3.perence. Mon Feb 20 02:25 - 18:38 16:12
testvnc04 out: jxie pts/60 vm1lnx3.perence. Thu Feb 16 18:31 - 18:51 00:20
testvnc04 out: kitagawa pts/21 :48.0 Sun Feb 12 06:47 still logged in
testvnc04 out: kitagawa pts/27 :48.0 Mon Feb 13 01:12 still logged in
testvnc04 out: kitagawa pts/48 :48.0 Mon Feb 13 16:54 still logged in
testvnc04 out: kitagawa pts/50 cdtest135.perence. Wed Feb 15 01:48 - 02:48 01:00
testvnc04 out: kitagawa pts/54 :51.0 Thu Feb 16 15:32 still logged in
testvnc04 out: kitagawa pts/59 :48.0 Mon Feb 20 15:34 still logged in
testvnc04 out: kmchow pts/31 test-kmchow.cadenc Mon Feb 13 09:54 still logged in
testvnc04 out: kmchow pts/32 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/33 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/34 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/35 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/36 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/37 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/38 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/39 :99 Mon Feb 13 09:55 still logged in
testvnc04 out: kmchow pts/40 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/40 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/41 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/41 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/42 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/42 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/43 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/43 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/44 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/44 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/45 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/45 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/46 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/46 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/47 :70 Mon Feb 13 09:56 - 192:02 00:05
testvnc04 out: kmchow pts/47 :70 Mon Feb 13 192:02 still logged in
testvnc04 out: kmchow pts/55 :70.0 Thu Feb 16 16:192 still logged in
testvnc04 out: sanubhav pts/56 test-sanubhav.cad Sun Feb 19 00:44 - 00:49 00:05
testvnc04 out: trr pts/50 fmf.perence. Mon Feb 13 22:32 - 14:16 15:43
testvnc04 out: trr pts/50 testvnc04:2.0 Thu Feb 16 14:37 still logged in
testvnc05 out:
testvnc05 out:
testvnc05 out: harman pts/169 :pts/338:S.0 Mon Feb 20 00:55 - 06:19 05:24
testvnc05 out: harman pts/270 :pts/331:S.0 Sun Feb 19 21:43 - 03:51 06:07
testvnc05 out: harman pts/271 :pts/331:S.2 Sun Feb 19 21:43 - 03:51 06:07
testvnc05 out: harman pts/291 :pts/331:S.3 Sun Feb 19 21:43 - 03:51 06:07
testvnc05 out: harman pts/318 :pts/338:S.2 Mon Feb 20 04:04 - 06:19 02:15
testvnc05 out: harman pts/329 :pts/338:S.1 Mon Feb 20 00:55 - 06:19 05:24
testvnc05 out: harman pts/331 192.168.47.44 Sun Feb 19 21:43 - 03:51 06:08
testvnc05 out: harman pts/334 :pts/331:S.1 Sun Feb 19 23:06 - 03:51 04:45
testvnc05 out: harman pts/338 192.168.47.44 Mon Feb 20 00:54 - 06:19 05:25
testvnc05 out: kitagawa pts/302 :24.0 Sun Feb 19 22:20 still logged in
testvnc05 out: kitagawa pts/50 :24.0 Mon Feb 20 18:59 still logged in
testvnc05 out: kvishnu pts/1925 :pts/332:S.4 Mon Feb 20 00:19 - 02:04 01:44
testvnc05 out: kvishnu pts/1925 :pts/332:S.4 Mon Feb 20 02:45 - 03:54 01:08
testvnc05 out: kvishnu pts/1925 :pts/332:S.4 Sun Feb 19 22:27 - 23:33 01:06
testvnc05 out: kvishnu pts/1925 :pts/78:S.4 Sun Feb 19 192:28 - 11:08 00:39
testvnc05 out: kvishnu pts/1927 :pts/332:S.0 Mon Feb 20 00:19 - 02:04 01:44
testvnc05 out: kvishnu pts/1927 :pts/332:S.0 Mon Feb 20 02:45 - 03:54 01:08
testvnc05 out: kvishnu pts/1927 :pts/332:S.0 Sun Feb 19 22:27 - 23:33 01:06
testvnc05 out: kvishnu pts/1192 :pts/332:S.1 Mon Feb 20 00:19 - 02:04 01:44
testvnc05 out: kvishnu pts/1192 :pts/332:S.1 Mon Feb 20 02:45 - 03:54 01:08
testvnc05 out: kvishnu pts/1192 :pts/332:S.1 Sun Feb 19 22:27 - 23:33 01:06
testvnc05 out: kvishnu pts/1192 :pts/78:S.1 Sun Feb 19 192:28 - 11:08 00:39
testvnc05 out: kvishnu pts/113 :pts/332:S.2 Mon Feb 20 00:19 - 02:04 01:44
testvnc05 out: kvishnu pts/113 :pts/332:S.2 Mon Feb 20 02:45 - 03:54 01:08
testvnc05 out: kvishnu pts/113 :pts/332:S.2 Sun Feb 19 22:27 - 23:33 01:06
testvnc05 out: kvishnu pts/113 :pts/78:S.2 Sun Feb 19 192:28 - 11:08 00:39
testvnc05 out: kvishnu pts/129 :pts/332:S.5 Mon Feb 20 00:19 - 02:04 01:44
testvnc05 out: kvishnu pts/129 :pts/332:S.5 Mon Feb 20 02:45 - 03:54 01:08
testvnc05 out: kvishnu pts/129 :pts/332:S.5 Sun Feb 19 22:27 - 23:33 01:06
testvnc05 out: kvishnu pts/129 :pts/78:S.5 Sun Feb 19 192:28 - 11:08 00:39
testvnc05 out: kvishnu pts/138 :pts/332:S.6 Mon Feb 20 00:19 - 02:04 01:44
Solution with awk or shell any one will be okay.
How about a simple:
awk 'NF == 12' File1

Listing missing months in an array of dates

I have a list of transactions in an array.
=> [Wed, 23 Oct 2013, Mon, 18 Nov 2013, Fri, 22 Nov 2013, Mon, 13 Jan 2014, Tue, 28 Jan 2014, Mon, 03 Feb 2014, Mon, 10 Feb 2014, Tue, 18 Feb 2014, Fri, 07 Mar 2014, Mon, 31 Mar 2014, Mon, 07 Apr 2014, Tue, 10 Jun 2014, Mon, 30 Jun 2014, Mon, 22 Sep 2014, Mon, 06 Oct 2014, Fri, 14 Nov 2014, Tue, 18 Nov 2014, Fri, 26 Dec 2014, Thu, 15 Jan 2015, Mon, 23 Mar 2015, Mon, 20 Apr 2015]
I need to compare the dates of each transaction and list any months that are missing in the list of months and year. Here is what I have now...
#find_transactions = (#user.transactions.find_all { |t| (t.name 'name' })
#trans_dates = #find_transactions.map(&:date).sort!.map { |s| Date.strptime(s, '%Y-%m') }.each_cons(2).map{ |d1,d2| d1.next_month == d2 }
This method currently gives me a true or false if each month is there but I need to actually have the method print a list of months that are missing. I would like to have it print the month and year together.
Here is the response this method gives me...
=> [true, false, true, false, false, true, false, true, false, false, false, true, true]
I want a response like this...
=> [March 2015, December 2014, September 2014]
Thanks in advance!
Edit: For array already being composed of date objects you can do:
require 'date'
dates = [Wed, 23 Oct 2013, Mon, 18 Nov 2013, Fri, 22 Nov 2013, Mon, 13 Jan 2014, Tue, 28 Jan 2014, Mon, 03 Feb 2014, Mon, 10 Feb 2014, Tue, 18 Feb 2014, Fri, 07 Mar 2014, Mon, 31 Mar 2014, Mon, 07 Apr 2014, Tue, 10 Jun 2014, Mon, 30 Jun 2014, Mon, 22 Sep 2014, Mon, 06 Oct 2014, Fri, 14 Nov 2014, Tue, 18 Nov 2014, Fri, 26 Dec 2014, Thu, 15 Jan 2015, Mon, 23 Mar 2015, Mon, 20 Apr 2015]
all_dates = []
dates.first.upto(dates.last) {|x| all_dates << x.strftime('%b %Y') if x.day == 1 || x == dates.first}
d = dates.map {|x| x.strftime('%b %Y')}.uniq
p (all_dates - d)
#=> ["Dec 2013", "May 2014", "Jul 2014", "Aug 2014", "Feb 2015"]
Edit: Below methods are for an array of date strings
You can try this:
require 'date'
dates = ["Wed, 23 Oct 2013", "Mon, 18 Nov 2013", "Fri, 22 Nov 2013", "Mon, 13 Jan 2014", "Tue, 28 Jan 2014", "Mon, 03 Feb 2014", "Mon, 10 Feb 2014", "Tue, 18 Feb 2014", "Fri, 07 Mar 2014", "Mon, 31 Mar 2014", "Mon, 07 Apr 2014", "Tue, 10 Jun 2014", "Mon, 30 Jun 2014", "Mon, 22 Sep 2014", "Mon, 06 Oct 2014", "Fri, 14 Nov 2014", "Tue, 18 Nov 2014", "Fri, 26 Dec 2014", "Thu, 15 Jan 2015", "Mon, 23 Mar 2015", "Mon, 20 Apr 2015"]
all_dates = []
d = dates.map {|x| Date.parse(x[8..-1])}.uniq
counter = d.first
until counter == d.last
all_dates << counter
counter = counter.next_month
end
p (all_dates - d).map {|x| x.strftime('%b %Y')}
#=> ["Dec 2013", "May 2014", "Jul 2014", "Aug 2014", "Feb 2015"]
Another (more concise) way would be:
require 'date'
dates = ["Wed, 23 Oct 2013", "Mon, 18 Nov 2013", "Fri, 22 Nov 2013", "Mon, 13 Jan 2014", "Tue, 28 Jan 2014", "Mon, 03 Feb 2014", "Mon, 10 Feb 2014", "Tue, 18 Feb 2014", "Fri, 07 Mar 2014", "Mon, 31 Mar 2014", "Mon, 07 Apr 2014", "Tue, 10 Jun 2014", "Mon, 30 Jun 2014", "Mon, 22 Sep 2014", "Mon, 06 Oct 2014", "Fri, 14 Nov 2014", "Tue, 18 Nov 2014", "Fri, 26 Dec 2014", "Thu, 15 Jan 2015", "Mon, 23 Mar 2015", "Mon, 20 Apr 2015"]
all_dates = []
d = dates.map {|x| Date.parse(x[8..-1])}.uniq
d.first.upto(d.last) {|x| all_dates << x if x.day == 1}
p (all_dates - d).map {|x| x.strftime('%b %Y')}
#=> ["Dec 2013", "May 2014", "Jul 2014", "Aug 2014", "Feb 2015"]
This is one way you could do that.
Code
require 'date'
def missing_months(dates)
a = dates.map { |s| d = Date.strptime(s, '%a, %d %b %Y'); d - d.day + 1 }
(all_months_in_range(*a.minmax) -a).map { |d| d.strftime('%b %Y') }
end
def all_months_in_range(f,l)
(12*(l.year-f.year)+l.month-f.month+1).times.map do |i|
y,m = (f.month+i).divmod(12)
y += f.year
(m=12; y-=1) if m ==0
Date.new(y,m)
end
end
Example
dates = ['Wed, 23 Oct 2013', 'Mon, 18 Nov 2013', 'Fri, 22 Nov 2013',
'Fri, 14 Nov 2014', 'Tue, 18 Nov 2014', 'Fri, 26 Dec 2014',
'Mon, 13 Jan 2014', 'Tue, 28 Jan 2014', 'Mon, 03 Feb 2014',
'Mon, 31 Mar 2014', 'Mon, 07 Apr 2014', 'Tue, 10 Jun 2014',
'Mon, 30 Jun 2014', 'Mon, 22 Sep 2014', 'Mon, 06 Oct 2014',
'Mon, 10 Feb 2014', 'Tue, 18 Feb 2014', 'Fri, 07 Mar 2014',
'Thu, 15 Jan 2015', 'Mon, 23 Mar 2015', 'Mon, 20 Apr 2015']
missing_months(dates)
#=> ["Dec 2013", "May 2014", "Jul 2014", "Aug 2014", "Feb 2015"]
Notice that the dates needn't be sorted.
Explanation
For the example above:
a = dates.map { |s| d = Date.strptime(s, '%a, %d %b %Y'); d - d.day + 1 }
#=> [#<Date: 2013-10-01 ((2456567j,0s,0n),+0s,2299161j)>,
# #<Date: 2013-11-01 ((2456598j,0s,0n),+0s,2299161j)>,
# ...
# #<Date: 2015-04-01 ((2457114j,0s,0n),+0s,2299161j)>]
Notice that each of these dates is on the first of the month. Next, obtain the first and last of these dates:
f,l = a.minmax
f #=> [#<Date: 2013-10-01 ((2456567j,0s,0n),+0s,2299161j)>,
l #=> #<Date: 2015-04-01 ((2457114j,0s,0n),+0s,2299161j)>]
Now pass f and l to all_months_in_range to create an array that contains a date object for the first day of each month between f and l.
b = all_months_in_range(f,l)
#=> [#<Date: 2013-10-01 ((2456567j,0s,0n),+0s,2299161j)>,
# #<Date: 2013-11-01 ((2456598j,0s,0n),+0s,2299161j)>,
# ...
# #<Date: 2015-04-01 ((2457114j,0s,0n),+0s,2299161j)>]
b.size #=> 19
I will skip an explanation of this helper method, as it is quite straightforward.
Compute that difference between arrays b and a to obtain the missing beginning-of-month dates:
c = b-a
#=> [#<Date: 2013-12-01 ((2456628j,0s,0n),+0s,2299161j)>,
# #<Date: 2014-05-01 ((2456779j,0s,0n),+0s,2299161j)>,
# #<Date: 2014-07-01 ((2456840j,0s,0n),+0s,2299161j)>,
# #<Date: 2014-08-01 ((2456871j,0s,0n),+0s,2299161j)>,
# #<Date: 2015-02-01 ((2457055j,0s,0n),+0s,2299161j)>]
Lastly, convert these dates to the desired format:
c.map { |d| d.strftime('%b %Y') }
#=> ["Dec 2013", "May 2014", "Jul 2014", "Aug 2014", "Feb 2015"]
Addendum: after reading #Sid's answer, I see I could have saved myself some trouble in my helper method by using Date#next_month:
def all_months_in_range(f,l)
(12*(l.year-f.year)+l.month-f.month+1).times.map { |i| f.next_month(i) }
end
This isn't very elegant, but it worked. I started with your original code, #SupremeA, and built off of that.
require 'date'
dates = ['Wed, 23 Oct 2013', 'Mon, 18 Nov 2013', 'Fri, 22 Nov 2013', 'Mon, 13 Jan 2014', 'Tue, 28 Jan 2014', 'Mon, 03 Feb 2014', 'Mon, 10 Feb 2014', 'Tue, 18 Feb 2014', 'Fri, 07 Mar 2014', 'Mon, 31 Mar 2014', 'Mon, 07 Apr 2014', 'Tue, 10 Jun 2014', 'Mon, 30 Jun 2014', 'Mon, 22 Sep 2014', 'Mon, 06 Oct 2014', 'Fri, 14 Nov 2014', 'Tue, 18 Nov 2014', 'Fri, 26 Dec 2014', 'Thu, 15 Jan 2015', 'Mon, 23 Mar 2015', 'Mon, 20 Apr 2015']
new_dates = []
dates.each { |d| new_dates.push(Date.parse(d).strftime('%B %Y')) }
sorted_dates = new_dates.map { |s| Date.strptime(s, '%B %Y') }.sort.uniq
missing_months = []
sorted_dates.each_cons(2) do |d1,d2|
d = d1
while d.next_month != d2
missing_months.push(d.next_month.strftime('%B %Y'))
d = d >> 1
end
end
p missing_months
=> ["December 2013", "May 2014", "July 2014", "August 2014", "February 2015"]

How do you get DateTime.parse to return a time in your time zone?

I need this
require 'date'
DateTime.parse "Mon, Dec 27 6:30pm"
to return a DateTime for 6:30pm in the EDT timezone, but it returns one in UTC. How can I get a EST DateTime or convert the UTC one into an EDT DateTime with a 6:30pm value?
OK I'm going to offer an answer to my own question
require 'time'
ENV["TZ"] = "US/Eastern"
Time.parse("Mon, Dec 27 6:30pm").to_datetime
=> #<DateTime: 2011-12-27T18:30:00-05:00 (117884327/48,-5/24,2299161)>
In Rails, this worked nicely for me
DateTime.parse "Mon, Dec 27 6:30pm #{Time.zone}"
It won't work in vanilla Ruby though.
Final answer ;-)
require 'date'
estHoursOffset = -5
estOffset = Rational(estHoursOffset, 24)
date = (DateTime.parse("Mon, Dec 27 6:30pm") - (estHoursOffset/24.0)).new_offset(estOffset)
(or -4 for EDT)
DateTime#change()
You can try using change() after parsing it to alter the timezone offset:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-0400' )
# => Wed, 27 Dec 2017 18:30:00 -0400
You can also just use the hours:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-4' )
# => Wed, 27 Dec 2017 18:30:00 -0400
But, be careful, you cannot use an integer:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: -4 )
# => Wed, 27 Dec 2017 18:30:00 +0000
If you need to determine the correct offset to use based on a time zone you can do something like this:
offset = ( Time.zone_offset('EDT') / 1.hour ).to_s
# => "-4"
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: offset )
# => Wed, 27 Dec 2017 18:30:00 -0400
You can also use change() to manually set other parts of the DateTime as well, like setting the hour to noon:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-4', hour: 12 )
# => Wed, 27 Dec 2017 12:00:00 -0400
Be careful with that one because you can see that it's cleared the minutes as well.
Here's the docs for the change() method: http://api.rubyonrails.org/v5.1/classes/DateTime.html#method-i-change
If you're using Rails' ActiveSupport:
"Mon, Dec 27 6:30pm".in_time_zone(-4.hours).to_datetime
# => Mon, 27 Dec 2021 18:30:00 -0400
Time.find_zone(-4.hours).parse("Mon, Dec 27 6:30pm").to_datetime
# => Mon, 27 Dec 2021 18:30:00 -0400
If you want to use the local daylight saving time (DST) rules, you could use:
"Mon, Dec 27 6:30pm".in_time_zone("Eastern Time (US & Canada)")
# => Mon, 27 Dec 2021 18:30:00 EST -05:00
Time.find_zone("Eastern Time (US & Canada)").parse("Mon, Dec 27 6:30pm")
# => Mon, 27 Dec 2021 18:30:00 EST -05:00
Time.find_zone("Eastern Time (US & Canada)").parse("Mon, Dec 27 6:30pm").to_datetime
# => Mon, 27 Dec 2021 18:30:00 -0500
Time.find_zone("Eastern Time (US & Canada)").parse("Mon, Jun 27 6:30pm")
# => Sun, 27 Jun 2021 18:30:00 EDT -04:00
Time.find_zone("Eastern Time (US & Canada)").parse("Mon, Jun 27 6:30pm").to_datetime
# => Sun, 27 Jun 2021 18:30:00 -0400
Time.find_zone("EST5EDT").parse("Mon, Jun 27 6:30pm").to_datetime
# => Sun, 27 Jun 2021 18:30:00 -0400
Notice the date in June, above, is automatically set to EDT (-0400) because this date is in DST, contrary to the December date.
To force EST regardless if date is within DST or not:
Time.find_zone("EST").parse("Mon, Jun 27 6:30pm")
# => Sun, 27 Jun 2021 18:30:00 EST -05:00
Time.find_zone("EST").parse("Mon, Jun 27 6:30pm").to_datetime
# => Sun, 27 Jun 2021 18:30:00 -0500

Resources