﻿// Copyright 2015-2025 Finsa S.p.A. <finsa@finsa.it>
//
// 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.

using System;
using System.Runtime.Serialization;

namespace Finsa.Caravan.WebApi.Controllers.Models
{
    /// <summary>
    ///   Rappresenta una descrizione sintetica delle informazioni sul servizio.
    /// </summary>
    [Serializable, DataContract]
    public sealed class ServiceInfoDTO
    {
        /// <summary>
        ///   La versione del servizio, letta direttamente dall'assembly .NET del servizio stesso.
        /// </summary>
        [DataMember(Order = 0)]
        public string Version { get; set; }

        /// <summary>
        ///   L'architettura (x86 oppure x64) del processo che esegue il servizio.
        /// </summary>
        [DataMember(Order = 1)]
        public string ProcessBitness { get; set; }

        /// <summary>
        ///   Il consumo attuale di memoria del processo che esegue il servizio, espresso in megabyte.
        /// </summary>
        [DataMember(Order = 2)]
        public long ProcessMemoryUsageMB { get; set; }

        /// <summary>
        ///   Il nome di rete del server su cui è ospitato il servizio.
        /// </summary>
        [DataMember(Order = 3)]
        public string HostName { get; set; }

        /// <summary>
        ///   Data e ora UTC del server su cui è ospitato il servizio.
        /// </summary>
        [DataMember(Order = 4)]
        public DateTime HostDateTime { get; set; }

        /// <summary>
        ///   Il nome della sorgente dati a cui è collegato Caravan e che, presumibilmente, è
        ///   condivisa con l'applicativo.
        /// </summary>
        [DataMember(Order = 5)]
        public string DataSourceName { get; set; }

        /// <summary>
        ///   Il tipo della sorgente dati a cui è collegato Caravan e che, presumibilmente, è
        ///   condivisa con l'applicativo.
        /// </summary>
        [DataMember(Order = 6)]
        public string DataSourceKind { get; set; }

        /// <summary>
        ///   Data e ora della sorgente dati a cui è collegato Caravan e che, presumibilmente, è
        ///   condivisa con l'applicativo.
        /// </summary>
        [DataMember(Order = 7)]
        public DateTime DataSourceDateTime { get; set; }
    }
}