Differenze tra le versioni di "Server OpenPass"
| [versione bozza] | [versione di qualità] |
(→Comunicazione tra il server openpass e i client delle stazioni: : modifica sottocapitoli servizi) |
(→Architettura software dei SERVIZI WEB Sistema openpass: : modifica tabella pssages.csv) |
||
| Riga 931: | Riga 931: | ||
! Nome file !! Campi !! Collegamento ad altri file (chiave esterna) | ! Nome file !! Campi !! Collegamento ad altri file (chiave esterna) | ||
|- | |- | ||
| − | | passages.csv || id_passaggio, id_group, id_company, id_ticket, CustomerIdentifier, log_time, | + | | passages.csv || id_passaggio, id_group, id_company, id_ticket, CustomerIdentifier, log_time, check_point_name, SerialNumber, time_modifica || Gruppi (id_group), Companies (id_company), Ticket (id_ticket), Dati_anagrafici (CustomerIdentifier), checkpoint (check_point_name) |
| − | |||
| − | |||
|} | |} | ||
| + | |||
Ogni notte verranno inviati tutti i passaggi registrati sul server OPENPASS il giorno precedente; verranno quindi inviati solo i delta. | Ogni notte verranno inviati tutti i passaggi registrati sul server OPENPASS il giorno precedente; verranno quindi inviati solo i delta. | ||
Versione delle 08:07, 15 set 2016
Indice
- 1 Periodicità, formato e contenuto delle informazioni Gestite nella rete OpenPass
- 2 Comunicazione tra il server openpass e i client delle stazioni
- 2.1 Architettura software dei servizi Web Sistema OpenPass
- 2.1.1 LOGIN
- 2.1.2 REGISTERTOKEN
- 2.1.3 REGISTERFORMAT
- 2.1.4 ENUMERATEFORMATS
- 2.1.5 GETFORMAT
- 2.1.6 REGISTERTICKET
- 2.1.7 ENUMERATETICKETS
- 2.1.8 GETTICKET
- 2.1.9 ENUMERATEGROUPS
- 2.1.10 ENUMERATECOMPANIES
- 2.1.11 ENUMERATEWORKSTATIONS
- 2.1.12 REGISTERWORKSTATIONKEY
- 2.1.13 ENUMERATEKEYS
- 2.1.14 GETKEY
- 2.1.15 REGISTERCUSTOMER
- 2.1.16 REGISTERSALES
- 2.1.17 REGISTERPASSAGES
- 2.1.18 SETDAILYFIRSTPASSAGESCOUNT
- 2.1.19 ERRORI
- 2.2 Architettura software dei nuovi servizi web Sistema openpass
- 2.3 Architettura hardware del sistema server
- 2.1 Architettura software dei servizi Web Sistema OpenPass
- 3 Comunicazione tra il server OpenPass e il nodo esterno
Periodicità, formato e contenuto delle informazioni Gestite nella rete OpenPass
Il Server OpenPass prevede l’invio dei dati di passaggio e vendita (ed i dati necessari al completamento dei primi due flussi come ticket e customer) da parte delle stazioni consociate ANEF Ski Lombardia in formato XML attraverso l’utilizzo di WebService. L’invio dei dati da parte dei client delle stazioni al server OpenPass può essere in real time oppure in differita tramite processi di batch a seconda del fornitore dei sistemi di accesso collegati alle stazioni.
Il Server OpenPass prevede poi un invio giornaliero costituito da un unico file compresso (.ZIP) contenente i file in formato CSV (comma separated values) ed il file XML per le meta-informazioni su una risorsa condivisa con Regione Lombardia; i dati trasferiti riguardano le anagrafiche ed i passaggi.
Comunicazione tra il server openpass e i client delle stazioni
Lo standard OpenPass prevede una rete distribuita di centri di raccolta dati collegati via web service al server centrale.
Le informazioni di vendita e passaggio sono raccolte ai varchi e inviate ai centri di raccolta dati, che a loro volta le trasmettono al server centrale.
Il protocollo di scambio tra server e centri di raccolta è REST, basato sul metalinguaggio XML. Il server riceve i dati e li memorizza in un database SQL centralizzato, dove ogni dato di vendita o passaggio è correlato da un codice seriale identificativo univoco e eventuali dati anagrafici del customer.
Il server gestisce a frequenza prestabilita operazioni di configurazione e di caricamento dati, attraverso chiamate XML.
Architettura software dei servizi Web Sistema OpenPass
La comunicazione tra il server OpenPass ed i client delle stazioni avviene su protocollo HTTP mediante l’architettura software RESTful.
Per la comunicazione sono stati progettati e realizzati sei servizi organizzate in risorse web accessibili a seguito di autenticazione.
L’architettura software utilizza il paradigma client-server; i servizi attivati, in architettura RESTFul, sono di seguito riportati.
LOGIN
Consente l’autenticazione di un utente che desidera collegarsi. Ad ogni stazione è associata una login specifica fornita da ANEF SKI Lombardia. L’autenticazione vale per tutta la durata della sessione di scambio dati.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Username | testo | si | Username della stazione |
| Password | testo | si | Password della stazione |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Group | numerico | Codice univoco di identificazione del gruppo |
| Company | numerico | Codice univoco di identificazione del gruppo |
REGISTERTOKEN
Consente di registrare un token personalizzato. I tokens che cominciano con ‘Root.’ richiedono l’accesso di un amministratore. Ogni token ha un tipo associato (es. numerico, data, ora etc.). Il token non dipende dalla Stazione che ne fa richiesta.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | testo | si | Nome del token |
| Description | testo | si | Descrizione del significato di token |
| Type | numerico | si | Tipo assegnato (0=numerico, 1=data, 2=ora) |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| CreatedNew | boolean | Booleano che indica se il token è stato aggiunto |
REGISTERFORMAT
Consente di registrare un formato di registrazione da utilizzare per la produzione e l’interpretazione di biglietti. Ritorna un codice identificativo univoco per il formato. La chiamata può essere effettuata tutte le volte che si vuole, il sistema ritornerà sempre lo stesso codice. Il codice di formato è quindi uguale per tute le stazioni che ne fanno richiesta. Lo stesso formato può essere condiviso tra più biglietti (es. Stagionale Adulti, Ridotto, FISI etc.).
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Description | testo | si | Descrizione del formato |
| Creator | testo | si | Nome del creatore del formato |
| Fixed area | oggetto | no | Oggetto contenente gli oggetti TokenAllocation della fixed area |
| Variable area | oggetto | no | Oggetto contenente gli oggetti TokenAllocation della variable area |
Oggetto Fixed area
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| TokenAllocation | oggetto | si | Oggetto contenente i valori dei Token |
Oggetto Variable area
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| TokenAllocation | oggetto | si | Oggetto contenente i valori dei Token |
Oggetto TokenAllocation
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | testo | si | Nome del Token precedentemente salvato |
| BitAdress | numerico | no | BitAdreass |
| BitWidth | numerico | no | BitWidth |
| ConstantValue | numerico | no | ConstantValue |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| FormatIdentifier | numerico | Codice numerico univoco di identificazione del formato |
ENUMERATEFORMATS
Restituisce l'elenco esaustivo dei codici identificativi dei formati noti al server.
Parametri input
Nessuno
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| FormatIdentifiers | oggetto | Lista dei codici identificativi dei formati noti al server |
Oggetto FormatIdentifiers
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione dei formati noti al server |
GETFORMAT
Dato un codice identificativo di formato ottiene la definizione dello stesso
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| FormatIdentifier | numerico | si | Codice numerico univoco di identificazione del formato |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Identifier | numerico | Codice numerico univoco di identificazione del formato |
| Description | testo | Descrizione del formato |
| Creator | testo | Nome del creatore del formato |
| LastTouch | data | Data e ora di creazione |
| Fixed area | oggetto | Oggetto contenente gli oggetti token allocation della fixed area |
| Variable area | oggetto | Oggetto contenente gli oggetti toke allocation della variable area |
Oggetto Fixed area
| Parametro | Tipo | Descrizione |
|---|---|---|
| TokenAllocation | oggetto | Oggetto contenente i valori dei Token |
Oggetto Variable area
| Parametro | Tipo | Descrizione |
|---|---|---|
| TokenAllocation | oggetto | Oggetto contenente i valori dei Token |
Oggetto TokenAllocation
| Parametro | Tipo | Descrizione |
|---|---|---|
| Name | testo | Nome del Token precedentemente salvato |
| BitAdress | numerico | BitAdress |
| BitWidth | numerico | BitWidth |
| ConstantValue | numerico | ConstantValue |
REGISTERTICKET
Consente di registrare un set di valori di tokens costanti per una certa categoria di biglietti al fine di poterla identificare con rapidità nelle elaborazioni dati. (Es. Stagionale adulti, Stagionale ridotto). Ritorna un codice identificativo univoco per il biglietto che è identico al valore passato per il token “TicketID” obbligatorio. La chiamata può essere effettuata tutte le volte che si vuole; a parità di valori il sistema ritornerà sempre lo stesso codice. La chiamata consente una registrazione diversa per ogni Stazione, ma il codice numerico ritornato sarà a parità di set di valori lo stesso su più stazioni. Due biglietti uguali non possono né devono avere codici identificativi differenti.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Description | testo | si | Descrizione del ticket |
| CustomerAge | numerico | si | Classe di età del destinatario del biglietto (1=”Bambini <=11”, 2=”Ragazzi 12-17”, 3=”Adulti 18-64”, 4=”Senior >= 65”) |
| CustomerType | numerico | no | Tipologia del destinatario del biglietto (1=”Non Residenti”, 2=”Residenti”) |
| Values | oggetto | si | oggetto contenente i TokenValue |
Oggetto Values
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| TokenValue | oggetto | si | Oggetto che contiene i dati dei token |
Oggetto TokenValue
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | testo | si | Nome del token. (Il Token “Root.TicketID” è obbligatorio) |
| Value | testo | si | Valore del token. (Il valore del Token “Root.TicketID” è obbligatorio) |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| TicketIdentifier | numerico | Codice numerico univoco di identificazione del biglietto. Il codice restituito sarà quello che viene passato con il Token “Root. TicketID” |
ENUMERATETICKETS
Ottieni l’elenco esaustivo dei codici identificativi dei biglietti noti al server per la stazione specificata.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Company | numerico | si | Codice numerico univico di identificazione della stazione |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| TicketIdentifiers | oggetto | Lista dei codici identificativi dei ticket noti al server |
Oggetto TicketIdentifiers
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione dei ticket noti al server |
GETTICKET
Dato un codice identificativo di biglietto, ottiene la definizione dello stesso
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Company | numerico | si | Codice numerico univoco di identificazione della stazione |
| TicketIdentifier | numerico | si | Codice numerico univoco di identificazione del biglietto |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Identifier | numerico | Codice numerico univoco di identificazione del biglietto |
| Description | testo | Descrizione del biglietto |
| CustomerAge | numerico | Classe di età del destinatario del biglietto (1=”Bambini <=11”, 2=”Ragazzi 12-17”, 3=”Adulti 18-64”, 4=”Senior >= 65”) |
| CustomerType | numerico | Tipologia del destinatario del biglietto (1=”Non Residenti”, 2=”Residenti”) |
| LastTouch | data | Data e ora di creazione |
| Values | oggetto | Oggetto contenente i TokenValue |
Oggetto Values
| Parametro | Tipo | Descrizione |
|---|---|---|
| TokenValue | oggetto | Oggetto che contiene i dati dei token |
Oggetto TokenValue
| Parametro | Tipo | Descrizione |
|---|---|---|
| Name | testo | Nome del token |
| Value | testo | Valore del token |
ENUMERATEGROUPS
Ottieni l'elenco esaustivo dei codici identificativi dei gruppi noti al server.
Parametri input
Nessuno
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| GroupIdentifies | oggetto | Lista dei codici identificativi dei gruppi noti al server |
Oggetto GroupIdentifies
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione dei gruppi noti al server |
ENUMERATECOMPANIES
Ottieni l’elenco esaustivo delle stazioni note al server appartenenti al gruppo specificato.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del gruppo |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Companies | oggetto | Lista dei codici identificativi delle stazioni appartenenti al gruppo |
Oggetto Companies
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione delle stazioni note al server |
ENUMERATEWORKSTATIONS
Ottieni l’elenco esaustivo delle postazioni di vendita note al server appartenenti alla società specificata.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Company | numerico | si | Codice numerico univoco di identificazione della stazione |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Workstations | oggetto | Lista dei codici identificativi delle workstations appartenenti alla stazione |
Oggetto Workstation
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione delle workstations note al server |
REGISTERWORKSTATIONKEY
Registra una chiave pubblica appartenente ad una postazione emittente
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del group |
| Company | numerico | si | Codice numerico univoco di identificazione della stazione |
| Workstation | numerico | si | Codice numerico univoco di identificazione della workstation |
| KeyIdentifier | numerico | si | Codice di identificazione della chiave |
| Expiri | data | si | Data di fine validità della chiave |
| KeyLength | numerico | si | Lunghezza della chiave |
| Modulus | testo | si | Modulo della chiave |
| Exponent | testo | si | Esponente della chiave |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| CreatedNew | boolean | Booleano che indica se la chiave è stata aggiunta |
ENUMERATEKEYS
Ottieni l’elenco esaustivo delle chiavi pubbliche della postazione emittente specificata
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del gruppo |
| Workstation | numerico | si | Codice numerico univoco di identificazione della workstation |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| KeyIdentifiers | oggetto | Lista dei codici identificativi delle chiavi appartenenti alle workstation |
Oggetto KeyIdentifiers
| Parametro | Tipo | Descrizione |
|---|---|---|
| Int | numerico | Codice numerico univoco di identificazione delle chiavi |
GETKEY
Ottieni la chiave pubblica specificata
Parametri input
| Parametro | Tipo | Obligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del group |
| Workstation | numerico | si | Codice numerico univoco di identificazione della workstation |
| KeyIdentifier | numerico | si | Codice di identificazione della chiave richiesta |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| Group | numerico | Codice numerico univoco di identificazione del group |
| Company | numerico | Codice numerico univoco di identificazione della stazione |
| Workstation | numerico | Codice numerico univoco di identificazione della workstation |
| KeyIdentifier | numerico | Codice di identificazione della chiave |
| Expiri | data | Data di fine validità della chiave |
| KeyLength | numerico | Lunghezza della chiave |
| Modulus | testo | Modulo della chiave |
| Exponent | testo | Esponente della chiave |
REGISTERCUSTOMER
Permette la registrazione di un cliente sul sistema ottenendo un codice numerico identificativo
Parametri input
| Paramentro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | numerico | si | Nome del cliente |
| Name | numerico | si | Numero cliente attribuito localmente dalle casse emittenti |
| Name | numerico | no | CRSIdentifier |
| Name | testo | no | CRSData |
| Name | testo | no | Info1 |
| Name | testo | no | Info2 |
| Name | numerico | no | Codice Postale |
| Name | testo | no | Immagine |
| Name | data | no | Data di fine validità del record |
Parametri output
| Paramentro | Tipo | Descrizione |
|---|---|---|
| CustomerIdentifier | numerico | Codic enumerico univoco di identificazione del cliente identico al codice attribuito localmente dalle casse emittenti |
| CreatedNew | boolean | Booleano che indica se il nuovo cliente è stato aggiunto |
REGISTERSALES
Registra un insieme di vendite di biglietti di consorzio in formato comune sul server per il gruppo, la società e le postazioni specificate. Ogni chiamata può contenere una o più registrazioni di vendita. Ogni vendita è associata ad un cliente, il cui codice identificativo va ottenuto con l'invocazione del servizio RegisterCustomer. Il CustomerIdentifier è a 0 per i biglietti non nominativi. All’interno di ogni vendita, unitamente al ticket identifier (che specifica i valori costanti), vengono specificati i valori rilevanti dei tokens ‘dinamici’, ovvero quelli assegnati al momento dell’edizione di un biglietto.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del gruppo |
| Company | numerico | si | Codice numerico di identificazione della stazione |
| Sales | oggetto | si | Oggetto che contiene i SaleTransaction |
Oggetto Sales
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| SaleTransaction | oggetto | si | Oggetto che contiene i dati delle vendite |
Oggetto SaleTransaction
| Paramentro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Workstation | numerico | si | Codice numerico univoco di identificazione della workstation |
| OperationType | numerico | si | Specifica il tipo di operazione (0=vendite, 1=annullamenti) |
| CreationTime | data | si | Data e ora di creazione e vendita del biglietto |
| Amount | numerico | si | Prezzo |
| CustomerIdentifier | numerico | si | Identificativo del cliente ottenuto registrando il cliente con il servizio RegisterCustomer (0 per biglietti non nominativi) |
| TicketIdentifier | numerico | si | Codice identificativo univoco del biglietto |
| ChipID | testo | no | ChipID dei dati di vendita |
| Values | oggetto | si | Oggetto che contiene i TokenValue |
Oggetto Values
| Paramentro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| TokenValue | oggetto | si | Oggetto che contiene i dati dei token |
Oggetto TokenValue
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | testo | si | Nome del token |
| Value | testo | si | Valore del token |
Parametri output
| Paramentro | Tipo | Descrizione |
|---|---|---|
| InsertedRecordsCount | numerico | Numero dei record effettivamente inseriti |
REGISTERPASSAGES
Registra un insieme di passaggi agli impianti di biglietti di consorzio in formato comune sul server per il gruppo, la società e gli impianti specificati. Ogni chiamata può contenere una o più registrazioni di passaggio. Ogni passaggio è opzionalmente associato ad un cliente, il cui codice identificativo va ottenuto con la RegisterCustomer. Ricordiamo che il CustomerIdentifier è a 0 per i biglietti non nominativi. All’interno di ogni passaggio, unitamente al ticket identifier (che specifica i valori costanti), vengono specificati i valori rilevanti dei tokens ‘dinamici’, ovvero quelli assegnati al momento dell’edizione di un biglietto e che si modificano durante l’utilizzo.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del gruppo |
| Company | numerico | si | Codice numerico univoco di identificazione del gruppo |
| Passages | oggetto | si | Oggetto che contiene i PassageTransaction |
Oggetto Passages
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| PassageTransaction | oggetto | si | Oggetto che contiene i dati dei passaggi |
Oggetto PassageTransaction
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| CustomerIdentifier | numerico | si | Identificativo del cliente ottenuto registrando il cliente con il servizio RegisterCustomer (0 per biglietti non nominativi) |
| TicketIdentifier | numerico | si | Codice identificativo del biglietto |
| LogTime | data | si | Data e ora del passaggio |
| CheckpointName | testo | si | Identificativo testuale univoco (case sensitive) dell’impianto di risalita all’interno della società specificata |
Oggetto Values
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| TokenValue | oggetto | si | Oggetto che contiene i dati dei token |
Oggetto Token Value
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Name | testo | si | Nome del token |
| Value | testo | si | Valore del token |
Parametri output
| Parametro | Tipo | Descrizione |
|---|---|---|
| InsertedRecordsCount | numerico | Numero dei record effettivamente inseriti |
SETDAILYFIRSTPASSAGESCOUNT
Invia al server, ai fini statistici, il conteggio indistinto dei primi passaggi di tutti i biglietti di stazione e di consorzio e non obbligatoriamente il conteggio distinto dei primi passaggi categorizzati.
Parametri input
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Group | numerico | si | Codice numerico univoco di identificazione del gruppo |
| Company | numerico | si | Codice numerico univoco di identificazione della stazione |
| Values | oggetto | si | Oggetto che contiene i DailyFirstPassagesCount |
Oggetto Values
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| DailyFirstPassagesCount | oggetto | si | Oggetto che contiene i conteggi dei passaggi |
Oggetto DailyFirstPassagesCount
| Paramentro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| Day | data | si | Data del giorno a cui si riferisce il conteggio dei passaggi |
| Count | numerico | si | Numero dei passaggi |
Parametri output
Nessun parametro.
ERRORI
| Sigla | Significato |
|---|---|
| 200 Bad credentials | Le credenziali fornite sono errate |
| 201 Must login first | Non è stato eseguito il login |
| 202 Bad request | Errore generico nella richiesta |
| 203 Unknown token | Un token menzionato nel formato non è conosciuto |
| 204 Unknown format | Il formato richiesto è sconosciuto |
| 205 Unknown ticket | Il biglietto richiesto è sconosciuto |
| 206 Unknown company | La società non è nell’elenco del server |
| 210 Unknown group | Il gruppo specificato non è noto al server |
| 211 Unknown Company | La società specificata non è nota al server |
| 212 Unknown workstation | La postazione specificata non è nota al server |
| 220 Unknown key | La chiave richiesta non è stata registrata |
| 301 Root.TicketID can not be empty or text | Si è inviata la registrazione di un biglietto sprovvisto di numero di identificazione o con numero di identificazione non numerico |
| 302 CustomerAge can not be empty | Si è inviata la registrazione di un biglietto sprovvisto di informazione relativa alla fascia di età, oppure con un codice relativo alla fascia di età errato |
Architettura software dei nuovi servizi web Sistema openpass
Nell’attuale sistema OpenPass è prevista un’evoluzione dei Servizi WEB esistenti per gestire ricarica e vendita online dei titoli di viaggio e consentire lo scambio dati tra le varie stazioni.
Viene introdotto il concetto di WebCompany: azienda accreditata OpenPass che può fornire servizio di vendita per le stazioni (company).
Viene introdotto il concetto di WebShop: portale specifico di vendita titoli OpenPass per una determinata Company. Una WebCompany può avere uno o più WebShop. Ogni WebShop è legato univocamente alla propria company (stazione). Nel caso di WebShop di comprensorio, una stazione (company) dovrà farsi carico di gestire il WebShop a cui è collegato il comprensorio.
Le stazioni (Company) devono comunicare al Server OpenPass quali sono i WebShop a loro associati. Solo dopo questa richiesta il server OpenPass assegna un identificativo unico al WebShop della WebCompany accreditata.
Per far questo sarà necessario:
- Modificare i servizi Web esistenti del server OpenPass:
| Servizio | Specifiche variazione |
|---|---|
| RegisterTicket | verrà inserito un TAG aggiuntivo <info></info> con contenuto serializzato (base64), utilizzabile dal produttore a piacere (Company di vendita). Questo campo conterrà informazioni utili al produttore dei sistemi di accesso e al fornitore del negozio internet (WebShop) |
| GetTicket | verrà restituito un TAG aggiuntivo <info></info> contenente informazioni utili al produttore dei sistemi di accesso e al fornitore del negozio internet (WebShop) |
| RegisterCustomer | verranno registrate nuove informazioni relative ai customer |
- Implementare nuovi servizi Web del server OpenPass:
| Servizio | Specifiche implementazioni |
|---|---|
| RegisterWebSales | Servizio per inviare le transizioni di vendita effettuate dal un WebShop. Ogni transazione di vendita verrà identificata univocamente dal proprio seriale di vendita RegisterWebSaleID fornito dal server OpenPass. Più transazioni di vendita possono essere raggruppate da un unico OrderNumber fornito dal Webshop in fase di invio transazioni. Tra le varie informazioni inviate ci saranno:
|
| UpdateWebSalelAmmount | Servizio per aggiornare le vendite Web con il quantitativo economico derivato dal calcolo dell'uso |
| GenerateTicket | Servizio con cui i fornitori dei sistemi di accesso potranno inviare al Server OpenPass i token Root.Workstation e Root.SerialNumberEx2 e la data di creazione della tessera con cui è stato generato il biglietto per ogni specifica transazione di vendita identificata con RegisterWebSaleID |
| GetWebSales | Servizio con cui i fornitori dei sistemi di accesso potranno scaricare dal server OpenPass tutte le vendite Web effettuate per ogni dominio. Il servizio viene interrogato passando l’identificativo della stazione) e l'ultimo RegisterWebSaleID in possesso dalla stazione. Il servizio restituisce le informazioni di tutte le transazioni di vendita successive al RegisterWebSaleID passato, relativi a tutti i domini a cui è associata la Company richiesta. In tali informazioni sono presenti gli OpenPassUID che identificano le tessere da ricaricare e i RegisterWebSaleID che permettono di legare le vendite WEB alle tessere ricaricate dai tornelli. |
| GetPassages | Servizio per recuperare tutti i passaggi effettuati da una tessera ricaricata a seguito di una vendita online identificata con RegisterWebSaleID e calcolare l'ammontare della vendita |
| SetDailyClosing | Servizio per inviare al server OpenPass lo stato di chiusura di una stazione indicante che tutti i passaggi sono stati inviati al server. Tale informazione sarà utile al fornitore di WebShop in quanto potrà da quel momento calcolare gli usi delle tessere ricaricate e conseguentemente l'ammontare della vendita |
| GetStatusSales | Servizio che dato in ingresso il RegisterWebSaleID restituisce in quale company, data e ora è stato scaricato |
| GetCustomer | Servizio che restituisce i dati di tutti del customer relativi ad uno specifico CustomerIdentifier |
| Getcustomersstatus | Servizio che restituisce l’ultima data di aggiornamento dei customers collegati ad un determinato dominio |
| Getcustomersdomain | Servizio che restituisce i dati di tutti i customers aggiornati da una certa data in poi |
| CreateDomain | Servizio che consente di creare nuovi domini |
| RegisterDomain | Servizio che permette di associare le company ai domini |
| GetDomainList | Servizio che restituisce tutti i domini associati ad un company |
Architettura hardware del sistema server
L’infrastruttura tecnologia a supporto del sistema OpenPass si compone delle componenti riportate nella tabella sottostante.
| Tipo | Nome | Posizione | Virtualizzazione |
|---|---|---|---|
| Virtual Machine | VM-OpenPass-Master | Roubaix | VmWare ESXi 5.5.0. |
| Virtual Machine | VM-OpenPass-Slave | Strasburgo | VmWare ESXi 5.5.0. |
Accesso SSH
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene installato il server openssh; l’istruzione che permette l’installazione del server openssh è la seguente:
apt-get install openssh-server
L'accesso tramite protocollo SSH viene personalizzato in questo modo:
- modifica della porta standard;
- disabilitazione accesso da parte dell'utente root;
- gestione di una lista restrittiva di utenti abilitati all'accesso.
Le modifiche sono riportate nel file di configurazione /etc/ssh/sshd_config.
Eseguita la modifica al file di configurazione il server viene riavviato dal seguente comando:
service ssh restart
Configurazione firewall
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene gestita la configurazione del firewall software mediante il sistema iptables. La configurazione del firewall prevede regole riportate nella seguente tabella.
| Servizio | Porta | Sorgente |
|---|---|---|
| Gestione del server webmin | Non stardard | Solo IP del gestore del server |
| Server database | Stardard | Solo da VM-OpenPass-Master per VM-OpenPass-Slave e viceversa solo da VM-OpenPass-Slave per VM-OpenPass-Master |
| Ping | Stardard | Solo IP del gestore del server |
| HTTP | Stardard | Ovunque |
| HTTPS | Stardard | Ovunque |
| SSH | Non stardard | Solo IP del gestore del server |
Server Web
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene installato il server WEB Apache 2 e l’application server PHP 5.
Per l’installazione del software viene utilizzato il seguente comando:
apt-get install apache2 pp5 php5-mysql
Il comando, oltre ad installare il server WEB e l’application server, si occupa dell’installazione del PDO di interfaccia con il database server.
Gestione Server - WEBMIN
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene installato il software di gestione Webmin.
Per l’installazione del software vengono utilizzati i seguenti comandi:
| deb http://download.webmin.com/download/repository sarge contrib deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib |
A seguito dell’installazione, dal pannello di controllo di Webmin, viene modificata la porta standard di accesso dell’applicativo.
Server Database
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene installato il server database MariaDB.
Per l’installazione del software viene utilizzato il seguente comando:
apt-get install mariadb-server mariadb-client
A fini prestazionali viene personalizzato il file di configurazione /etc/mysql/my.cnf.
A seguito della personalizzazione viene riavviato il server database tramite il comando
service mysql restart
VM-OpenPass-Slave si comporta da slave database nei confronti di VM-OpenPass-Master: ogni tupla inserita, modificata o eliminata all’interno del server database VM-OpenPass-Master viene replicata nel server database VM-OpenPass-Slave.
Al fine della replicazione viene creato un utente slave_user sul server database di VM-OpenPass-Master tramite il comando:
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '**********'; FLUSH PRIVILEGES;
Sempre sul server database VM-OpenPass-Master viene letto il valore di MASTER_LOG_FILE e MASTER_LOG_POS con il seguente comando:
SHOW MASTER STATUS;
Infine sul server database VM-OpenPass-Slave viene fatta partire la replicazione con il seguente comando (sostituendo i valori MASTER_LOG_FILE_VALUE e MASTER_LOG_POS_VALUE con quelli ricavati dalla lettura del VM-OpenPass-Master):
CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx', MASTER_USER='slave_user', MASTER_PASSWORD='**********', MASTER_LOG_FILE='MASTER_LOG_FILE_VALUE', MASTER_LOG_POS=MASTER_LOG_POS_VALUE;
Sorgenti del progetto
Le caratteristiche del codice sorgente del progetto sono riportate nella seguente tabella.
| Linguaggio | PHP 5 |
| Framework | Zend Framework |
| Posizione | /var/www/openpass |
Servizio di monitoring
Viene realizzato e schedulato uno script che permette di controllare periodicamente lo stato della replicazione di VM-OpenPass-Slave. Lo stato di replicazione viene derivato dall’analisi del comando:
SHOW MASTER STATUS;
L’analisi viene effettuata ogni 5 minuti.
Sia per VM-OpenPass-Master che per VM-OpenPass-Slave viene realizzato e schedulato uno script che permette di controllare lo spazio su disco residuo. Il controllo dello spazio residuo viene effettuato ogni ora; vengono inviati alert all’amministratore di sistema nel caso in cui lo spazio utilizzato superi il 90% dello spazio totale del disco.
Backup
Sono implementati i servizi di backup della componente database riportati nella seguente tabella.
| Tipo | Periodicità |
|---|---|
| Backup completo | 1 volta al giorno |
| Backup incrementale | 1 volta all'ora |
Comunicazione tra il server OpenPass e il nodo esterno
Il server OPENPASS giornalmente mette a disposizione di Regione Lombardia una parte dei dati presenti nel Server OpenPass attraverso un file system remoto (cartella condivisa via internet).
Le informazioni trasferite riguardano i passaggi e le anagrafiche, nel dettaglio:
- Checkpoint (batteria di tornelli )
- Companies (stazioni sciistiche)
- Customer_age (fasce di età utilizzatori)
- Customer type (residenza utilizzatori)
- Dati_anagrafici (informazioni utilizzatori)
- Domain (Consorzi di località sciistiche)
- Domain_companies (relazioni consorzi – stazioni)
- Gestori
- Group (gruppi)
- Impianti
- Localita_sciistiche
- Ticket (biglietti)
- Ticket_type (tipo di biglietti)
- Tipi_impianti (tipo di impianti)
Ogni flusso dati è composto da un unico file compresso (.ZIP) contenente i file in formato CSV (comma separated values) ed il file XML per le meta-informazioni.
Architettura software dei SERVIZI WEB Sistema openpass
Il server OPENPASS deposita nella cartella condivisa in questa cartella i flussi che contengono le informazioni da trasferire (anagrafiche e passaggi).
Per ogni file, il nome sarà auto esplicativo e,per ogni flusso, sarà così composto:
“aaaammgg_tipoflusso.zip”
dove:
- “aaaa” indica l’anno di estrazione a cui si riferisce il flusso
- “mm” indica il mese di estrazione a cui si riferisce il flusso, in cifre, nella forma 01, 02, 03… 12
- “gg” indica il giorno di estrazione a cui si riferisce il flusso, in cifre, nella forma 01, 02, 03…31
- “Tipoflusso” può assumere i valori di: “anagrafiche” o “passaggi”
- “.zip” fisso indica l’estensione del file compresso
Il file compresso al suo interno potrà contenere un numero variabile di file a seconda della tipologia di flusso.
In tutti i flussi dovrà essere presente un file di metadati (infoflusso.xml) che indichi:
- Nome del file del flusso complessivo (equivalente al nome del file complessivo, compresa estensione)
- Data a cui si riferisce il flusso complessivo (informazione contenuta nel nome file)
- Tipologia di flusso (passaggi o anagrafiche) (informazione contenuta nel nome file)
- Data e ora in cui il flusso è stato estratto dal Server OPENPASS;
- Operatore che ha estratto i dati dall’archivio;
- Numero di files contenuti nel flusso (compreso il presente file di metadati);
- Indicazione del nome di ogni file contenuto nel flusso;
- Per ogni file, numero di records contenuti nel files.
Il server OPENPASS trasmetterà le informazioni concordate con Regione Lombardia secondo la seguente frequenza:
| Flusso N° | Descrizione | Frequenza | Orario |
|---|---|---|---|
| 1 | Anagrafiche | Giornaliera | 01:01 |
| 2 | Passaggi | Giornaliera | 02:01 |
Le anagrafiche che verranno trasferite dal server OPENPASS verso Regione Lombardia sono:
- Checkpoint (batteria di tornelli )
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| checkpoint.csv | id_checkpoint_openpass, nome_localita, id_localita, id_impianto, nome_impianto, id_checkpoint, nome_checkpoint, id_gestore, nome_gestore | Località (id_localita), Impianti (id_impianto), Gestori (id_gestore) |
- Companies (stazioni sciistiche)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| companies.csv | id_company, id_supplier, name |
- Customer_age (fasce di età utilizzatori)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| customer_age.csv | id, name, description |
- Customer type (residenza utilizzatori)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| dati_anagrafici.csv | id_persona, anno_nascita, sesso, residenza, stato_residenza, CustomerIdentifier |
- Domain (Consorzi di località sciistiche)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| domain.csv | id_domain, id_group, name | Group (id_group) |
- Domain_companies (relazioni consorzi – stazioni)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| domain_companies.csv | id_domain, id_company | Companies (id_company), Domain (id_domain) |
- Gestori (gestori)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| gestori.csv | id_gestore, nome, ragione_sociale, id_localita | Localita (id_localita) |
- Group (gruppi)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| group.csv | id_group, name |
- Impianti
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| impianti.csv | id_impianto_openpass, nome_localita, id_impianto, nome_impianto, tipo_impianto |
- Localita_sciistiche
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| localita_sciistiche.csv | id_localita, sigla_localita, descrizione |
- Ticket (biglietti)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| ticket.csv | id_ticket, description, CustomerAge, CustomerType, TicketType, id_company | Customer_age (CustomerAge), Customer_type (CustomerType), Ticket_Type (TicketType), Companies (id_company) |
- Ticket_type (tipo di biglietti)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| ticket.csv | Id, description |
- Tipi_impianti (tipo di impianti)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| tipi_impianti.csv | id_tipo_impianto, sigla_impianto, descrizione |
Ogni notte verranno inviati tutte le anagrafiche registrate sul server OPENPASS.
I passaggi che verranno trasferiti dal server OPENPASS verso Regione Lombardia sono:
- Passaggi (dati dei passaggi sui checkpoint)
| Nome file | Campi | Collegamento ad altri file (chiave esterna) |
|---|---|---|
| passages.csv | id_passaggio, id_group, id_company, id_ticket, CustomerIdentifier, log_time, check_point_name, SerialNumber, time_modifica | Gruppi (id_group), Companies (id_company), Ticket (id_ticket), Dati_anagrafici (CustomerIdentifier), checkpoint (check_point_name) |
Ogni notte verranno inviati tutti i passaggi registrati sul server OPENPASS il giorno precedente; verranno quindi inviati solo i delta.
Vengono inviati i passaggi solo se esiste il checkpoint relativo.
Vengono inviati i passaggi solo se esiste l’impianto collegato al chekpoint relativo.
Architettura hardware del sistema server
L’architettura hardware è la medesima descritta nel paragrafo Architettura hardware del sistema server.