package au.gov.amsa.geo.adhoc;
import java.io.File;
import java.util.List;
import java.util.regex.Pattern;
import au.gov.amsa.geo.distance.OperatorEffectiveSpeedChecker;
import au.gov.amsa.geo.model.SegmentOptions;
import au.gov.amsa.risky.format.BinaryFixes;
import au.gov.amsa.util.Files;
import rx.Observable;
public class EffectiveSpeedFailuresMain {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".*\\.track");
List<File> files = Files.find(new File("/media/an/binary-fixes-5-minute/2015"), pattern);
int count = Observable.from(files).filter(file -> !file.getName().equals("0.track"))
// .lift(Logging.<File> logger().showCount().showValue().log())
// read fixes from file
.flatMap(file -> BinaryFixes.from(file)
.lift(new OperatorEffectiveSpeedChecker(SegmentOptions.builder()
.acceptAnyFixHours(12L).maxSpeedKnots(50).build()))
.filter(check -> !check.isOk())
.reduce(new MmsiCount(0, 0),
(mc, fix) -> new MmsiCount(fix.fix().mmsi(), mc.count + 1))
.filter(mc -> mc.count >= 1000))
.toSortedList((a, b) -> Long.compare(b.count, a.count))
// flatten
.flatMapIterable(x -> x)
// print answer
.doOnNext(mc -> System.out.println(mc.mmsi))
//
.count()
// go
.toBlocking().single();
System.out.println(count);
}
private static class MmsiCount {
long mmsi;
long count;
MmsiCount(long mmsi, long count) {
this.mmsi = mmsi;
this.count = count;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("MmsiCount [mmsi=");
builder.append(mmsi);
builder.append(", count=");
builder.append(count);
builder.append("]");
return builder.toString();
}
}
}