diff --git a/tools/dreport.d/include.d/functions b/tools/dreport.d/include.d/functions
new file mode 100755
index 0000000..a2af4da
--- /dev/null
+++ b/tools/dreport.d/include.d/functions
@@ -0,0 +1,137 @@
+#!/usr/bin/env bash
+
+# @brief Execute the command and save the output into the dreport
+#        packaging, if it is in the user allowed dump size limit.
+# @param $1 Command to be executed.
+# @param $2 Save file name.
+# @param $3 Plugin description used for logging.
+function add_cmd_output()
+{
+    command="$1"
+    file_name="$2"
+    desc="$3"
+
+    eval $command >> "$name_dir/$file_name"
+    if [ $? -ne 0 ]; then
+        log_error "Failed to collect $desc"
+        return 1
+    fi
+
+    if check_size "$name_dir/$file_name"; then
+        log_info "Collected $desc"
+    else
+        log_warning "Skipping $desc"
+    fi
+}
+
+# @brief Copy the file or directory into the dreport packaging,
+#        if it is in the user allowed dump size limit.
+# @param $1 Copy file or directory name.
+# @param $2 Plugin description used for logging.
+function add_copy_file()
+{
+    file_name="$1"
+    desc="$2"
+
+    cp -r $file_name $name_dir
+    if [ $? -ne 0 ]; then
+        log_error "Failed to copy $desc $file_name"
+        return $RESOURCE_UNAVAILABLE
+    fi
+    if check_size "$name_dir/$(basename "$file_name")"; then
+        log_info "Copied $desc $file_name"
+        return $SUCCESS
+    else
+        return $RESOURCE_UNAVAILABLE
+        log_warning "Skipping copy $desc $file_name"
+    fi
+}
+
+# @brief Calculate file or directory compressed size based on input
+#        and check whether the size in the allowed size limit.
+#        Remove the file or directory from the name_dir
+#        if the check fails.
+# @param $1 Source file or directory
+# @return 0 on success, error code if size exceeds the limit.
+# Limitation: compress and tar will have few bytes size difference
+function check_size()
+{
+    source=$1
+
+    #No size check required incase dump_size is set to unlimited
+    if [ $dump_size = $UNLIMITED ]; then
+        return 0
+    fi
+
+    #get the file or directory size
+    if [[ -d $source ]] && [[ -n $source ]]; then
+        tar -cf "$source.tar" -C \
+                 $(dirname "$source") $(basename "$source")
+        size=$(stat -c%s "$source.tar")
+        rm "$source.tar"
+    else
+        size=$(stat -c%s "$source")
+    fi
+
+    if [ $((size + cur_dump_size)) -gt $dump_size ]; then
+        #Exceed the allowed limit,
+        #tar and compress the files and check the size
+        tar -Jcf "$name_dir.tar.xz" -C \
+                  $(dirname "$name_dir") $(basename "$name_dir")
+        size=$(stat -c%s "$name_dir.tar.xz")
+        if [ $size -gt $dump_size ]; then
+            #Remove the the specific data from the name_dir and continue
+            rm "$source" "$name_dir.tar.xz"
+            return $RESOURCE_UNAVAILABLE
+        else
+            rm "$name_dir.tar.xz"
+        fi
+    fi
+
+    cur_dump_size=$((size + cur_dump_size))
+    return $SUCCESS
+}
+
+# @brief log the error message
+# @param error message
+function log_error()
+{
+   echo $($TIME_STAMP) "ERROR: $@" >> $dreport_log
+   if ((quiet != TRUE)); then
+      echo $($TIME_STAMP) "ERROR: $@" >&2
+   fi
+}
+
+# @brief log warning message
+# @param warning message
+function log_warning()
+{
+    if ((verbose == TRUE)); then
+        echo $($TIME_STAMP) "WARNING: $@" >> $dreport_log
+        if ((quiet != TRUE)); then
+            echo $($TIME_STAMP) "WARNING: $@" >&2
+        fi
+    fi
+}
+
+# @brief log info message
+# @param info message
+function log_info()
+{
+    if ((verbose == TRUE)); then
+        echo $($TIME_STAMP) "INFO: $@" >> $dreport_log
+        if ((quiet != TRUE)); then
+            echo $($TIME_STAMP) "INFO: $@" >&1
+        fi
+    fi
+}
+
+# @brief log summary message
+# @param message
+function log_summary()
+{
+    echo $($TIME_STAMP) "$@" >> $summary_log
+    if ((quiet != TRUE)); then
+        echo $($TIME_STAMP) "$@" >&1
+    fi
+}
