Package com.linkedin.databus.bootstrap.utils

Source Code of com.linkedin.databus.bootstrap.utils.BootstrapAvroRecordDumper$DumpEventHandler

package com.linkedin.databus.bootstrap.utils;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/


import java.io.File;
import java.io.IOException;

import org.apache.avro.Schema;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.log4j.Logger;

import com.linkedin.databus.core.DbusEvent;

public class BootstrapAvroRecordDumper
{
  public static final String MODULE = BootstrapAvroRecordDumper.class.getName();
  public static final Logger LOG = Logger.getLogger(MODULE);

  public static final String OUTPUT_DIR_OPT_LONG_NAME = "output_dir";
  public static final char   OUTPUT_DIR_OPT_CHAR = 'o';

  public static String outputDir = null;

  public static void main(String[] args)
      throws Exception
  {
    BootstrapTableReader.init(args);
    BootstrapTableReader reader = new BootstrapTableReader(new DumpEventHandler(outputDir, BootstrapTableReader.getSchema()));
    reader.execute();
  }

  @SuppressWarnings("static-access")
  public static void parseArgs(String[] args) throws IOException
  {
    CommandLineParser cliParser = new GnuParser();


    Option outputDirOption = OptionBuilder.withLongOpt(OUTPUT_DIR_OPT_LONG_NAME)
        .withDescription("Help screen")
        .create(OUTPUT_DIR_OPT_CHAR);

    Options options = new Options();
    options.addOption(outputDirOption);


    CommandLine cmd = null;
    try
    {
      cmd = cliParser.parse(options, args);
    }
    catch (ParseException pe)
    {
      LOG.fatal("Bootstrap Avro Record Dumper: failed to parse command-line options.", pe);
      throw new RuntimeException("Bootstrap Avro Record Dumper: failed to parse command-line options.", pe);
    }

    if (cmd.hasOption(OUTPUT_DIR_OPT_CHAR))
    {
      outputDir = cmd.getOptionValue(OUTPUT_DIR_OPT_CHAR);
    }
  }

  public static class DumpEventHandler
  implements BootstrapReaderEventHandler
  {
    private String _query = null;

    private DataFileWriter<GenericRecord> writer = null;
    private File directory = null;
    private File currentFile = null;

    public DumpEventHandler(String dir, Schema schema)
        throws IOException
    {
      DataFileWriter<GenericRecord> writeCreator = new DataFileWriter<GenericRecord>(new GenericDatumWriter(schema));
      directory = new File(dir);

      if (! directory.isDirectory())
        throw new RuntimeException("The path (" + dir + ") either does not exist or is not a directory !!");

      currentFile = new File(directory.getAbsolutePath() + "/part-000.avro");
      writer = writeCreator.create(schema, currentFile);
    }

    @Override
    public void onRecord(DbusEvent event, GenericRecord record)
    {
      try {
        writer.append(record);
      } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
      }
    }

    @Override
    public void onStart(String query)
    {
      _query = query;
    }

    @Override
    public void onEnd(int count)
    {
      System.out.println("Read " + count + " records by executing query :( " + _query + ")");
    }

  }
}
TOP

Related Classes of com.linkedin.databus.bootstrap.utils.BootstrapAvroRecordDumper$DumpEventHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.