assemblyline_models/datastore/
heuristic.rs1
2use std::collections::HashMap;
3
4use serde::{Deserialize, Serialize};
5use struct_metadata::Described;
6
7use crate::{ElasticMeta, Readable, types::{ExpandingClassification, Text}};
8
9
10#[derive(Debug, Serialize, Deserialize, Described, Clone)]
12#[metadata_type(ElasticMeta)]
13#[metadata(index=true, store=true)]
14pub struct Heuristic {
15 #[metadata(copyto="__text__")]
17 #[serde(default)]
18 pub attack_id: Vec<String>,
19 #[serde(flatten)]
21 pub classification: ExpandingClassification,
22 #[metadata(copyto="__text__")]
24 pub description: Text,
25 #[metadata(copyto="__text__")]
27 pub filetype: String,
28 #[metadata(copyto="__text__")]
30 pub heur_id: String,
31 #[metadata(copyto="__text__")]
33 pub name: String,
34 pub score: i32,
36 #[serde(default)]
38 pub signature_score_map: HashMap<String, i32>,
39 #[serde(default)]
41 pub stats: Statistics,
42 pub max_score: Option<i32>,
44}
45
46impl Readable for Heuristic {
47 fn set_from_archive(&mut self, _from_archive: bool) {}
48}
49
50
51#[derive(Debug, Serialize, Deserialize, Described, Default, Clone)]
53#[serde(default)]
54#[metadata_type(ElasticMeta)]
55#[metadata(index=true, store=true)]
56pub struct Statistics {
57 pub count: i32,
59 pub min: i32,
61 pub max: i32,
63 pub avg: i32,
65 pub sum: i32,
67 pub first_hit: Option<chrono::DateTime<chrono::Utc>>,
69 pub last_hit: Option<chrono::DateTime<chrono::Utc>>,
71}