# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: acquisition_task.proto

from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)




DESCRIPTOR = _descriptor.FileDescriptor(
  name='acquisition_task.proto',
  package='ts_mon.proto',
  serialized_pb='\n\x16\x61\x63quisition_task.proto\x12\x0cts_mon.proto\"\x8a\x01\n\x04Task\x12\x14\n\x0cservice_name\x18\x14 \x01(\t\x12\x10\n\x08job_name\x18\x1e \x01(\t\x12\x13\n\x0b\x64\x61ta_center\x18( \x01(\t\x12\x11\n\thost_name\x18\x32 \x01(\t\x12\x10\n\x08task_num\x18< \x01(\x05\" \n\x06TypeId\x12\x16\n\x0fMESSAGE_TYPE_ID\x10\xd5\x9d\x9e\x10')



_TASK_TYPEID = _descriptor.EnumDescriptor(
  name='TypeId',
  full_name='ts_mon.proto.Task.TypeId',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='MESSAGE_TYPE_ID', index=0, number=34049749,
      options=None,
      type=None),
  ],
  containing_type=None,
  options=None,
  serialized_start=147,
  serialized_end=179,
)


_TASK = _descriptor.Descriptor(
  name='Task',
  full_name='ts_mon.proto.Task',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='service_name', full_name='ts_mon.proto.Task.service_name', index=0,
      number=20, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=unicode("", "utf-8"),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='job_name', full_name='ts_mon.proto.Task.job_name', index=1,
      number=30, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=unicode("", "utf-8"),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='data_center', full_name='ts_mon.proto.Task.data_center', index=2,
      number=40, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=unicode("", "utf-8"),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='host_name', full_name='ts_mon.proto.Task.host_name', index=3,
      number=50, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=unicode("", "utf-8"),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='task_num', full_name='ts_mon.proto.Task.task_num', index=4,
      number=60, type=5, cpp_type=1, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
    _TASK_TYPEID,
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  serialized_start=41,
  serialized_end=179,
)

_TASK_TYPEID.containing_type = _TASK;
DESCRIPTOR.message_types_by_name['Task'] = _TASK

class Task(_message.Message):
  __metaclass__ = _reflection.GeneratedProtocolMessageType
  DESCRIPTOR = _TASK

  # @@protoc_insertion_point(class_scope:ts_mon.proto.Task)


# @@protoc_insertion_point(module_scope)
