Search in sources :

Example 1 with ForensiqClient

use of com.xrtb.fraud.ForensiqClient in project XRTB by benmfaul.

the class Configuration method initialize.

/**
 * Initialize the system from the JSON or Aerospike configuration file.
 *
 * @param path String - The file name containing the Java Bean Shell code.
 * @param shard Stromg. The shard name
 * @param port int. The port the web access listens on
 * @param sslPort  int. The port the SSL listens on.
 * @throws Exception
 *             on file errors.
 */
public void initialize(String path, String shard, int port, int sslPort) throws Exception {
    this.fileName = path;
    /**
     ****************************
     * System Name
     ****************************
     */
    this.shard = shard;
    this.port = port;
    this.sslPort = sslPort;
    java.net.InetAddress localMachine = null;
    String useName = null;
    try {
        localMachine = java.net.InetAddress.getLocalHost();
        ipAddress = localMachine.getHostAddress();
        useName = localMachine.getHostName();
    } catch (Exception error) {
        useName = getIpAddress();
    }
    if (shard == null || shard.length() == 0)
        instanceName = useName + ":" + port;
    else
        instanceName = shard + ":" + useName + ":" + port;
    /**
     * Set up tem p files
     */
    // create the temp
    Files.createDirectories(Paths.get("www/temp"));
    // directory in www so
    // preview campaign will
    // work
    /**
     *******************************************
     * USE ZOOKEEPER, AEROSPIKE OR FILE CONFIG
     ********************************************
     */
    String str = null;
    if (path.startsWith("zookeeper")) {
        String[] parts = path.split(":");
        logger.info("Zookeeper: {}", "" + parts);
        zk = new ZkConnect(parts[1]);
        zk.join(parts[2], "bidders", instanceName);
        str = zk.readConfig(parts[2] + "/bidders");
    } else if (path.startsWith("aerospike")) {
        String[] parts = path.split(":");
        logger.info("Zookeeper: {}", "" + parts);
        ;
        String aerospike = parts[1];
        String configKey = parts[2];
        AerospikeHandler spike = AerospikeHandler.getInstance(aerospike, 3000, 300);
        redisson = new RedissonClient(spike);
        Database.getInstance(redisson);
        str = redisson.get(configKey);
        if (str == null) {
            throw new Exception("Aerospike configuration at " + path + " not available.");
        }
        logger.info("Zookeeper: {}", str);
    } else {
        byte[] encoded = Files.readAllBytes(Paths.get(path));
        str = Charset.defaultCharset().decode(ByteBuffer.wrap(encoded)).toString();
        str = Configuration.substitute(str);
        System.out.println(str);
    }
    Map<?, ?> m = DbTools.mapper.readValue(str, Map.class);
    /**
     ****************************************************************************
     */
    seats = new HashMap<String, String>();
    if (m.get("lists") != null) {
        filesList = (List) m.get("lists");
        initializeLookingGlass(filesList);
    }
    if (m.get("s3") != null) {
        Map<String, String> ms3 = (Map) m.get("s3");
        String accessKey = ms3.get("access_key_id");
        String secretAccessKey = ms3.get("secret_access_key");
        String region = ms3.get("region");
        s3_bucket = ms3.get("bucket");
        s3 = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretAccessKey));
        ObjectListing listing = s3.listObjects(new ListObjectsRequest().withBucketName(s3_bucket));
        try {
            processDirectory(s3, listing, s3_bucket);
        } catch (Exception error) {
            System.err.println("ERROR IN AWS LISTING: " + error.toString());
        }
    }
    if (m.get("ssl") != null) {
        Map x = (Map) m.get("ssl");
        ssl = new SSL();
        ssl.setKeyManagerPassword = (String) x.get("setKeyManagerPassword");
        ssl.setKeyStorePassword = (String) x.get("setKeyStorePassword");
        ssl.setKeyStorePath = (String) x.get("setKeyStorePath");
    }
    /**
     * Create the seats id map, and create the bin and win handler classes
     * for each exchange
     */
    seatsList = (List<Map>) m.get("seats");
    for (int i = 0; i < seatsList.size(); i++) {
        Map x = seatsList.get(i);
        String seatId = (String) x.get("id");
        String className = (String) x.get("bid");
        int k = className.indexOf("=");
        String[] parts = new String[2];
        String uri = className.substring(0, k);
        className = className.substring(k + 1);
        String[] options = null;
        /**
         * set up any options on the class string
         */
        if (className.contains("&")) {
            parts = className.split("&");
            className = parts[0].trim();
            options = parts[1].split(",");
            for (int ind = 0; ind < options.length; ind++) {
                options[ind] = options[ind].trim();
            }
        }
        String[] tags = uri.split("/");
        String exchange = tags[tags.length - 1];
        String name = (String) x.get("name");
        if (name == null)
            name = exchange;
        String id = (String) x.get("id");
        seats.put(name, id);
        try {
            Class<?> c = Class.forName(className);
            BidRequest br = (BidRequest) c.newInstance();
            if (br == null) {
                throw new Exception("Could not make new instance of: " + className);
            }
            Map extension = (Map) x.get("extension");
            if (x != null)
                br.handleConfigExtensions(extension);
            /**
             * Handle generic-ized exchanges
             */
            if (className.contains("Generic")) {
                br.setExchange(exchange);
                br.usesEncodedAdm = true;
            }
            RTBServer.exchanges.put(uri, br);
            if (parts[0] != null) {
                for (int ind = 1; ind < parts.length; ind++) {
                    String option = parts[ind];
                    String[] tuples = option.split("=");
                    switch(tuples[0]) {
                        case "usesEncodedAdm":
                            br.usesEncodedAdm = true;
                            break;
                        case "!usesEncodedAdm":
                            br.usesEncodedAdm = false;
                            break;
                        case "rlog":
                            Double rlog = Double.parseDouble(tuples[1]);
                            ExchangeLogLevel.getInstance().setExchangeLogLevel(name, rlog.intValue());
                            break;
                        case "useStrings":
                            break;
                        case "!useStrings":
                            break;
                        case "!usesPiggyBackWins":
                            break;
                        case "usesPiggyBackWins":
                            BidRequest.setUsesPiggyBackWins(name);
                            break;
                        default:
                            System.err.println("Unknown request: " + tuples[0] + " in definition of " + className);
                    }
                }
            }
            /**
             * Appnexus requires additional support for ready, pixel and
             * click
             */
            if (className.contains("Appnexus")) {
                RTBServer.exchanges.put(uri + "/ready", new Appnexus(Appnexus.READY));
                RTBServer.exchanges.put(uri + "/pixel", new Appnexus(Appnexus.PIXEL));
                RTBServer.exchanges.put(uri + "/click", new Appnexus(Appnexus.CLICK));
                RTBServer.exchanges.put(uri + "/delivered", new Appnexus(Appnexus.DELIVERED));
                Appnexus.seatId = seatId;
            }
        } catch (Exception error) {
            System.err.println("Error configuring exchange: " + name + ", error = ");
            throw error;
        }
    }
    /**
     * Create forensiq
     */
    Map fraud = (Map) m.get("fraud");
    if (fraud != null) {
        if (m.get("forensiq") != null) {
            logger.info("*** Fraud detection is set to Forensiq");
            Map f = (Map) m.get("forensiq");
            String ck = (String) f.get("ck");
            Integer x = (Integer) f.get("threshhold");
            if (!(x == 0 || ck == null || ck.equals("none"))) {
                ForensiqClient fx = ForensiqClient.build(ck);
                if (fraud.get("endpoint") != null) {
                    fx.endpoint = (String) fraud.get("endpoint");
                }
                if (fraud.get("bidOnError") != null) {
                    fx.bidOnError = (Boolean) fraud.get("bidOnError");
                }
                if (f.get("connections") != null)
                    ForensiqClient.getInstance().connections = (int) (Integer) fraud.get("connections");
                forensiq = fx;
            }
        } else {
            logger.info("*** Fraud detection is set to MMDB");
            String db = (String) fraud.get("db");
            if (db == null) {
                throw new Exception("No fraud db specified for MMDB");
            }
            MMDBClient fy;
            try {
                fy = MMDBClient.build(db);
            } catch (Error error) {
                throw error;
            }
            if (fraud.get("bidOnError") != null) {
                fy.bidOnError = (Boolean) fraud.get("bidOnError");
            }
            if (fraud.get("watchlist") != null) {
                fy.setWatchlist((List<String>) fraud.get("watchlist"));
            }
            forensiq = fy;
        }
    } else {
        logger.info("*** NO Fraud detection");
    }
    /**
     * Deal with the app object
     */
    m = (Map) m.get("app");
    password = (String) m.get("password");
    if (m.get("threads") != null) {
        RTBServer.threads = (Integer) m.get("threads");
    }
    if (m.get("multibid") != null) {
        multibid = (Boolean) m.get("multibid");
    }
    if (m.get("adminPort") != null) {
        adminPort = (Integer) m.get("adminPort");
    }
    if (m.get("adminSSL") != null) {
        adminSSL = (Boolean) m.get("adminSSL");
    }
    String strategy = (String) m.get("strategy");
    if (strategy != null && strategy.equals("heuristic"))
        RTBServer.strategy = STRATEGY_HEURISTIC;
    else
        RTBServer.strategy = STRATEGY_MAX_CONNECTIONS;
    verbosity = (Map) m.get("verbosity");
    if (verbosity != null) {
        logLevel = (Integer) verbosity.get("level");
        printNoBidReason = (Boolean) verbosity.get("nobid-reason");
    }
    template = (Map) m.get("template");
    if (template == null) {
        throw new Exception("No template defined");
    }
    encodeTemplates();
    encodeTemplateStubs();
    geotags = (Map) m.get("geotags");
    if (geotags != null) {
        String states = (String) geotags.get("states");
        String codes = (String) geotags.get("zipcodes");
        geoTagger.initTags(states, codes);
    }
    Boolean bValue = false;
    bValue = (Boolean) m.get("stopped");
    if (bValue != null && bValue == true) {
        RTBServer.stopped = true;
        pauseOnStart = true;
    }
    Map redis = (Map) m.get("redis");
    if (redis != null) {
        Integer rsize = (Integer) redis.get("pool");
        if (rsize == null)
            rsize = 64;
        String host = (String) redis.get("host");
        Integer rport = (Integer) redis.get("port");
        if (rport == null)
            rport = 6379;
        // JedisPoolConfig poolConfig = new JedisPoolConfig();;
        // configJedis.setMaxTotal(rsize);
        // configJedis.setMaxWaitMillis(10);
        // poolConfig.setMaxIdle(4000);
        // Tests whether connections are dead during idle periods
        // poolConfig.setTestWhileIdle(true);
        // poolConfig.setMaxTotal(4000);
        // poolConfig.setMaxWaitMillis(30);
        // jedisPool = new JedisPool(poolConfig,host,rport);
        MyJedisPool.host = host;
        MyJedisPool.port = rport;
        jedisPool = new MyJedisPool(1000, 1000, 5);
        logger.info("*** JEDISPOOL = {}/{}/{} {}", jedisPool, host, rport, rsize);
    }
    Map zeromq = (Map) m.get("zeromq");
    if (zeromq == null) {
        throw new Exception("Zeromq is mot configured!");
    }
    String value = null;
    Double dValue = 0.0;
    bValue = false;
    Map r = (Map) m.get("aerospike");
    if (r != null) {
        if ((value = (String) r.get("host")) != null)
            cacheHost = value;
        if (r.get("port") != null)
            cachePort = (Integer) r.get("port");
        if (r.get("maxconns") != null)
            maxconns = (Integer) r.get("maxconns");
        AerospikeHandler.getInstance(cacheHost, cachePort, maxconns);
        redisson = new RedissonClient(AerospikeHandler.getInstance());
        Database.getInstance(redisson);
        logger.info("*** Aerospike connection set to: {}. port: {}. connections: {}, handlers: {}", cacheHost, cachePort, maxconns, AerospikeHandler.getInstance().getCount());
        String key = (String) m.get("deadmanswitch");
        if (key != null) {
            deadmanSwitch = new DeadmanSwitch(redisson, key);
        }
    } else {
        redisson = new RedissonClient();
        Database db = Database.getInstance(redisson);
        readDatabaseIntoCache("database.json");
        readBlackListIntoCache("blacklist.json");
    }
    /**
     * Zeromq
     */
    if ((value = (String) zeromq.get("bidchannel")) != null)
        BIDS_CHANNEL = value;
    if ((value = (String) zeromq.get("nobidchannel")) != null)
        NOBIDS_CHANNEL = value;
    if ((value = (String) zeromq.get("winchannel")) != null)
        WINS_CHANNEL = value;
    if ((value = (String) zeromq.get("requests")) != null)
        REQUEST_CHANNEL = value;
    if ((value = (String) zeromq.get("unilogger")) != null)
        UNILOGGER_CHANNEL = value;
    if ((value = (String) zeromq.get("clicks")) != null)
        CLICKS_CHANNEL = value;
    if ((value = (String) zeromq.get("fraud")) != null)
        FORENSIQ_CHANNEL = value;
    if ((value = (String) zeromq.get("responses")) != null)
        RESPONSES = value;
    if ((value = (String) zeromq.get("status")) != null)
        PERF_CHANNEL = value;
    if ((value = (String) zeromq.get("reasons")) != null)
        REASONS_CHANNEL = value;
    Map xx = (Map) zeromq.get("subscribers");
    List<String> list = (List) xx.get("hosts");
    commandsPort = (String) xx.get("commands");
    for (String host : list) {
        String address = "tcp://" + host + ":" + commandsPort + "&commands";
        commandAddresses.add(address);
    }
    if (zeromq.get("requeststrategy") != null) {
        Object obj = zeromq.get("requeststrategy");
        if (obj instanceof String) {
            strategy = (String) zeromq.get("requeststrategy");
            if (strategy.equalsIgnoreCase("all") || strategy.equalsIgnoreCase("requests"))
                requstLogStrategy = REQUEST_STRATEGY_ALL;
            if (strategy.equalsIgnoreCase("bids"))
                requstLogStrategy = REQUEST_STRATEGY_BIDS;
            if (strategy.equalsIgnoreCase("WINS"))
                requstLogStrategy = REQUEST_STRATEGY_WINS;
        } else {
            if (obj instanceof Integer) {
                int level = (Integer) obj;
                ExchangeLogLevel.getInstance().setStdLevel(level);
            } else if (obj instanceof Double) {
                Double perc = (Double) obj;
                ExchangeLogLevel.getInstance().setStdLevel(perc.intValue());
            }
        }
    }
    /**
     *****************************************************************
     */
    campaignsList.clear();
    pixelTrackingUrl = (String) m.get("pixel-tracking-url");
    winUrl = (String) m.get("winurl");
    redirectUrl = (String) m.get("redirect-url");
    if (m.get("ttl") != null) {
        ttl = (Integer) m.get("ttl");
    }
    initialLoadlist = (List<Map>) m.get("campaigns");
    for (Map<String, String> camp : initialLoadlist) {
        if (camp.get("id") != null) {
            addCampaign(camp.get("name"), camp.get("id"));
        } else {
            logger.error("Configuration, *** ERRORS DETECTED IN INITIAL LOAD OF CAMPAIGNS *** ");
        }
    }
    if (cacheHost == null)
        logger.warn("*** NO AEROSPIKE CONFIGURED, USING CACH2K INSTEAD *** ");
    if (winUrl.contains("localhost")) {
        logger.warn("Configuration", "*** WIN URL IS SET TO LOCALHOST, NO REMOTE ACCESS WILL WORK FOR WINS ***");
    }
}
Also used : MMDBClient(com.xrtb.fraud.MMDBClient) ObjectListing(com.amazonaws.services.s3.model.ObjectListing) BidRequest(com.xrtb.pojo.BidRequest) ListObjectsRequest(com.amazonaws.services.s3.model.ListObjectsRequest) DeadmanSwitch(com.xrtb.bidder.DeadmanSwitch) Database(com.xrtb.db.Database) List(java.util.List) ArrayList(java.util.ArrayList) Appnexus(com.xrtb.exchanges.appnexus.Appnexus) BasicAWSCredentials(com.amazonaws.auth.BasicAWSCredentials) AmazonS3Client(com.amazonaws.services.s3.AmazonS3Client) RedissonClient(com.aerospike.redisson.RedissonClient) AerospikeHandler(com.aerospike.redisson.AerospikeHandler) S3Object(com.amazonaws.services.s3.model.S3Object) DataBaseObject(com.xrtb.db.DataBaseObject) Map(java.util.Map) NavMap(com.xrtb.blocks.NavMap) HashMap(java.util.HashMap) ForensiqClient(com.xrtb.fraud.ForensiqClient)

Example 2 with ForensiqClient

use of com.xrtb.fraud.ForensiqClient in project XRTB by benmfaul.

the class TestFraud method testGood.

/**
 * Test a valid bid response.
 * @throws Exception on networking errors.
 */
// @Test
public void testGood() throws Exception {
    ForensiqClient forensiq = ForensiqClient.build("YOUR KEY HERE");
    String rt = "display";
    String ip = "123.250.33.4";
    String url = "http%3A%2F%2Fwww.myheretrtrtouse.com%2Fsections%2Fliving%3Fa%3D3%20";
    String ua = "erererer%2F4.0%20(compatible%3B%20MSIE%207.0%3B%20Windoreererws%20NT%206.0)";
    String seller = "seller1234";
    String crid = "xyz1234";
    FraudLog m = forensiq.bid(rt, ip, url, ua, seller, crid);
    assertNull(m);
}
Also used : FraudLog(com.xrtb.fraud.FraudLog) ForensiqClient(com.xrtb.fraud.ForensiqClient)

Example 3 with ForensiqClient

use of com.xrtb.fraud.ForensiqClient in project XRTB by benmfaul.

the class TestFraud method testBad.

/**
 * Test a valid bid response.
 * @throws Exception on networking errors.
 */
// @Test
public void testBad() throws Exception {
    ForensiqClient forensiq = ForensiqClient.build("6RLzOXoxntkqr0PHJ1Z0");
    String rt = "display";
    // device.ip
    String ip = "52.35.123.110";
    // site.page
    String url = "http%3A%2F%2Fwww.myheretrtrtouse.com%2Fsections%2Fliving%3Fa%3D3%20";
    // device.ua
    String ua = "erererer%2F4.0%20(compatible%3B%20MSIE%207.0%3B%20Windoreererws%20NT%206.0";
    // site.name
    String seller = "seller1234";
    // your creative id
    String crid = "creative1234";
    FraudLog m = forensiq.bid(rt, ip, url, ua, seller, crid);
    assertNotNull(m);
}
Also used : FraudLog(com.xrtb.fraud.FraudLog) ForensiqClient(com.xrtb.fraud.ForensiqClient)

Example 4 with ForensiqClient

use of com.xrtb.fraud.ForensiqClient in project XRTB by benmfaul.

the class TestFraud method testARealBid.

// @Test
public void testARealBid() throws Exception {
    ForensiqClient forensiq = ForensiqClient.build("YOUR_KEY_HERE");
    String s = Charset.defaultCharset().decode(ByteBuffer.wrap(Files.readAllBytes(Paths.get("./SampleBids/nexage.txt")))).toString();
    String rt = "display";
    String ip = "123.254.33.4";
    String url = "http%3A%2F%2Fwww.myheretrtrtouse.com%2Fsections%2Fliving%3Fa%3D3%20";
    String ua = "erererer%2F4.0%20(compatible%3B%20MSIE%207.0%3B%20Windoreererws%20NT%206.0)";
    String seller = "seller1234";
    String crid = "xyz1234";
    FraudLog m = forensiq.bid(rt, ip, url, ua, seller, crid);
    assertNull(m);
}
Also used : FraudLog(com.xrtb.fraud.FraudLog) ForensiqClient(com.xrtb.fraud.ForensiqClient)

Aggregations

ForensiqClient (com.xrtb.fraud.ForensiqClient)4 FraudLog (com.xrtb.fraud.FraudLog)3 AerospikeHandler (com.aerospike.redisson.AerospikeHandler)1 RedissonClient (com.aerospike.redisson.RedissonClient)1 BasicAWSCredentials (com.amazonaws.auth.BasicAWSCredentials)1 AmazonS3Client (com.amazonaws.services.s3.AmazonS3Client)1 ListObjectsRequest (com.amazonaws.services.s3.model.ListObjectsRequest)1 ObjectListing (com.amazonaws.services.s3.model.ObjectListing)1 S3Object (com.amazonaws.services.s3.model.S3Object)1 DeadmanSwitch (com.xrtb.bidder.DeadmanSwitch)1 NavMap (com.xrtb.blocks.NavMap)1 DataBaseObject (com.xrtb.db.DataBaseObject)1 Database (com.xrtb.db.Database)1 Appnexus (com.xrtb.exchanges.appnexus.Appnexus)1 MMDBClient (com.xrtb.fraud.MMDBClient)1 BidRequest (com.xrtb.pojo.BidRequest)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1