def delete(self):
        if getattr(self, "api", None) is None:
            self.api = shark_api.SharkAPI()

        self.api.delete_job(self.job_id)
        main.db.session.delete(self)
        main.db.session.commit()
    def __init__(self, name, job_filter, interface, limit, user):
        self.api = shark_api.SharkAPI()
        self.job_name = name
        self.job_filter = job_filter
        self.job_interface = interface
        self.job_limit = limit
        self.job_snapshot_size = 65535  # in bytes, number of packets in the capture
        self.job_status = {}            # stores state, size, start time and end time
        self.user = user
        self.user_notified = False      # used to notify user once when the job is done

        # send post request to api, on return populate id && status
        payload = {
            "name": self.job_name,
            "bpf_filter": self.job_filter,
            "interface_name": self.job_interface,
            "start_immediately": False,
            "snap_length": self.job_snapshot_size,
            "packet_retention": {"size_limit": self.job_limit},
            "stop_rule": {}
        }

        response = self.api.create_job(payload)
        if response.status_code == 201:
            resp = json.loads(response.text)
            self.job_id = resp.get('id')
        else:
            self.error = response
    def get_status(self):
        if getattr(self, "api", None) is None:
            self.api = shark_api.SharkAPI()

        job = self.api.get_job(self.job_id)
        if isinstance(job, requests.Response):
            return job

        return job.get('status')
    def start(self):
        if getattr(self, "api", None) is None:
            self.api = shark_api.SharkAPI()

        self.api.start_job(self.job_id)
    def download(self):
        if getattr(self, "api", None) is None:
            self.api = shark_api.SharkAPI()

        return self.api.download_job(self.job_id)