Բովանդակություն

Ներածություն

appsettings.json-ը նախատեսված է 8X սերվիսի աշխատանքի կարգավորման պարամետրերը սահմանելու համար, ինչպիսիք են տվյալների բազայի Sql Connection-ը, լոգավորման կարգավորումները: Այստեղ ավելացվում են կարգավորումներ, որոնք պարունակում են գաղտնիք (password) կամ որոնք էականորեն փոխում են 8X սերվիսի պահվածքը։ Նման պարամետրորը նպատակահարմար չէ պահել 4X հարթակի համակարգային պարամետրերի մեջ։

Տե՛ս նաև

additionalSettings

Նախկինում 8X սերվիս լոգին լինելու համար անհրաժեշտ էր միայն մուտքանուն և գաղտնաբառ, որի արդյունքում ստացվում էր JWT token, որի միջոցով օգտագործողը նույնականացվում էր և կարող էր կատարել կամայական API կանչեր։

Այժմ մտցվել է API Client-ի գաղափար, որը նախատեսված է 8X սերվիս մուտք գործող կլիենտ ծրագրի սահմանման համար։
Այն անհրաժեշտ է ստեղծել 4X կամ 8X համակարգի UI-ից “API Client-ներ” դիտելու ձևից “Ավելացնել” կոնտեքստային ֆունկցիայով՝ նշելով կլիենտի վավերականացման եղանակը (սերտիֆիկատով կամ բանալիով) և նկարագրելով Json ֆորմատի Manifest ֆայլ, որը սահմանում է կլիենտ ծրագրի իրավասությունները և սահմանափակումները (որ օգտագործողները կարող են մուտք գործել համակարգ, որ տվյալների աղբյուրներին, փաստաթղթերին, DPR-ներին կարող են դիմել ու որ API կանչերը կատարել)։

api_client_add

Այս հայտանիշը ավելացվել է հին լոգինի մեխանիզմը անջատելու համար։

"additionalSettings": {
    "disableOldLogins": false
}

Պարամետրեր

  • disableOldLogins - Լոգինի հին մեխանիզմի անջատման հայտանիշ։

Autentication

Azure AD-ով կամ Windows ADFS-ով նույնականացման կարգավորումներ։
Մանրամասների համար տե՛ս

Այս կարգավորումները հարկավոր է լինեն նույնը 8X սերվիսի և կոնֆիգուրացիոն սերվիսի համար։

"Autentication": {
    "Alternative": "AD",
    "AD": {
        "Authority": "https://login.microsoftonline.com/yourdomain.am",
        "ClientId": "158u5wn2-2n95-14nm-22b2-9694efe14vae",
        "RedirectUri": "https://yourdomain.am/b2bAdminTool",
        "TokenMapping": "oid",
        "ResourceID": "https://yourdomain.am/Cloud"
    },
    "ADFS": {
        "Authority": "https://federationservername.yourdomain.am/adfs",
        "ClientId": "v04c6fd-4220-14e6-n315-f147ac852c18",
        "RedirectUri": "https://localhost:44322",
        "TokenMapping": "sid"
    }
}

Պարամետրեր

  • Alternative - Սահմանում է օգտագործողի նույնականացման եղանակը՝ AD կամ ADFS։
  • AD - Կարգավորում է Azure Active Directory-ով նույնականացման կարգավորումները։
    • Authority - Oգտագործողի նույնականացման համար անհրաժեշտ URL-ը։
    • ClientId - Ծրագրի Client ID-ն, որը գրանցված է Azure AD-ում:
    • RedirectUri - Նույնականացումից հետո վերահղման համար URL-ը:
    • TokenMapping - Նույնականացման համար անհրաժեշտ տոկենի տեսակը` OID:
    • ResourceID - Ծրագրի կողմից մուտքագրվող ռեսուրսի URL-ը:
  • ADFS - Կարգավորում է Active Directory Federation Services (ADFS)-ով նույնականացման կարգավորումները։
    • Authority - Oգտագործողի նույնականացման համար անհրաժեշտ URL-ը։
    • ClientId - Ծրագրի Client ID-ն, որը գրանցված է ADFS-ում:
    • RedirectUri - Նույնականացումից հետո վերահղման համար URL-ը:
    • TokenMapping - Նույնականացման համար անհրաժեշտ տոկենի տեսակը` SID:

db

Այս բաժինը նախատեսված է տվյալների բազայի կարգավորումները տալու համար։

"db": {
    "server": "TEST-SERVER",
    "database": "test_db",
    "login": "test-user",
    "password": "test-password",
    "readOnly" : "1",
    "maxPoolSize" : 100,
    "customerId": "100000",
    "encrypt": false
}

Պարամետրեր

  • server - Սերվերի անուն։
  • database - Սերվերում գտնվող տվյալների բազայի անուն։
  • login - Տվյալների բազայի սերվերին մուտք գործելու համար օգտագործվող մուտքանունը։
  • password - Տվյալների բազայի սերվերին մուտք գործելու համար օգտագործվող գաղտնաբառը։
  • readOnly - Նշում է, թե արդյոք տվյալների բազային միացումը միայն կարդալու իրավասությամբ, է թե ոչ։ Ընդունում է “0” կամ “1” արժեք։ Լռությամբ արժեքը “0” է։
  • maxPoolSize - Տվյալների բազային միացումների Pool-ում միացումների առավելագույն քանակը։ Լռությամբ արժեքը 100 է։
  • customerId - Պատվիրատուի նույնակացման համար։ Օգտագորվում է ՀԾ-Ձեռնարկության և ՀԾ-Աշխատավարձի 8X սերվիսների կողմից։
  • encrypt - Նշում է, թե արդյոք տվյալների բազային միացումը ծածկագրվի, թե ոչ։ Լռությամբ արժեքը false է։

Hangfire

Hangfire-ը գրադարան է, որը նախատեսված է background job-երի հերթի դրման և կատարման մեխանիզմը ապահովելու համար։

"IsHangfireServer": false

"Hangfire": {
    "server": "TEST-SERVER",
    "database": "test_db",
    "login": "test-user",
    "password": "test-password",
    "workerCount": 10,
    "expirationInDays": 1
}

Պարամետրեր

  • IsHangfireServer - Hangfire Server-ի միացման հայտանիշ։
  • server - Սերվերի անունը, որտեղ գտնվում է Hangfire-ի տվյալների բազան:
  • database - Տվյալների բազայի անունը, որը օգտագործում է Hangfire-ը:
  • login - Տվյալների բազայի սերվերին մուտք գործելու համար օգտագործվող մուտքանունը։
  • password - Տվյալների բազայի սերվերին մուտք գործելու համար օգտագործվող գաղտնաբառը։
  • workerCount - Ֆոնային աշխատող պրոցեսների քանակը, որոնք Hangfire-ը պետք է օգտագործի առաջադրանքները մշակելու համար։
  • expirationInDays - Նշում է օրերի քանակը, որից հետո մշակված առաջադրանքները կհամարվեն ժամկետանց և կջնջվեն տվյալների բազայից։

JwtConfig

8X սերվիսում ծրագրային նույնականացվելուց սերվիսը տրամադրվում է JWT Token, որը օգտագործվում է API կանչերի ժամանակ նույնականությունը ստուգելու համար: Այս բաժնում սահմանված են JWT Token-ի կարգավորումները։

"JwtConfig": {
    "secret": "7V{)Grmn0/12cx^TY<gnl.568",
    "issuer": "test_db",
    "expirationInMinutes": 1440,
    "refreshExpirationInMinutes": 43200
}

Պարամետրեր

  • secret - JWT Token-ի վավերականացման ու ստորագրման համար նախատեսված բանալի։
  • issuer - Token-ը թողարկող տվյալների բազայի անունը։
  • expirationInMinutes - JWT Token-ի վավերականության տևողությունը րոպեներով։
  • refreshExpirationInMinutes - Թարմացման Token-ի վավերականության տևողությունը րոպեներով:

redisCachingSettings

Redis-ը նախատեսված է տվյալների քեշավորման և արագ բեռնման համար։ Այս բաժնում սահմանված են Redis-ի կարգավորումները։

"redisCachingSettings": {
    "enabled": false,
    "connectionString": "dockerub1:6379,password=mypassword"
}

Պարամետրեր

  • enabled - Redis-ով տվյալների քեշավորման միացման հայտանիշ։
  • connectionString - Redis սերվերին միացման Connection string-ը։ Տե՛ս Redis Connection Strings։

redisCachedItems

Այս բաժինը նախատեսված է կարգավորելու Redis սերվերում պահվող առանձին տվյալներ և պահպանման տևողությունը։ Այն ընդլայնվում է և առաձին պրոյեկտներում կարող է ավելի շատ լինել։
Օրինակ ՀԾ-Բանկի սերվիսը տալիս է OLAP կարգավորումների քեշավորման պարամետրերը։

8X հարթակում նվազագույնը առկա են հետևյալ կարգավորումները փաստաթղթի մետատվյալները, պարամետրերը և մոնիտորինգի համար անհրաժեշտ տվյալները քեշավորելու համար։

"redisCachedItems": {
    "documentMetadata": {
        "enabled": true,
        "lifetime": "1.00:00:00"
    },
    "monitoring": {
        "enabled": true,
        "lifetime": "0.00:01:00"
    },
    "parameters": {
        "enabled": true,
        "lifetime": "1.00:00:00"
    }
}

Յուրաքանչյուր բաժին պարունակում է երկու պարամետր՝

  • enabled - Թույլատրված է քեշավորումը Redis-ում, թե ոչ։
  • lifetime - Քեշի պահպանման տևողությունը Redis-ում։ Լռությամբ արժեքը 1 օրն է։

Serilog

8X սերվիսում լոգերի հավաքագրման համար օգտագործվում է Serilog գրադարանը։ appsettings.json-ում կարգավորումների ձևը որոշվում է Serilog գրադարանի կողմից։

Լոգավորումը հնարավոր է կարգավորել այնպես, որ լոգը գրանցվի Console-ում, ֆայլում կամ Seq սերվերում։ Հնարավոր է կարգավորել, որ միաժամանակ մի քանի աղբյուրում կատարվի լոգի գրանցում։ Այդ թվում կիրառելով որոշակի ֆիլտր։

Տե՛ս նաև

MinimumLevel-ի կարգավորում

Այստեղ կարգավորվում է լոգի պահպանման մակարդակը (Information, Warning, Error, Debug, Trace)։

Օրինակ՝

"Serilog": {
    "MinimumLevel": {
        "Default": "Information",
        "Override": {
            "Microsoft": "Warning",
            "System": "Warning",
            "Microsoft.AspNetCore": "Warning",
            "Serilog.AspNetCore": "Warning"
        }
    }
}

Պարամետրեր

  • MinimumLevel:Default - Կարգավորովում է լոգի պահպանման մակարդակը (Information, Warning, Error, Debug, Trace) ընդհանուր դեպքում։
  • MinimumLevel:Override - Կարգավորովում է լոգի պահպանման մակարդակը առանձին աղբյուրների համար։

Լոգի գրանցում ֆայլում

Ֆայլում գրանցումը ապահովելու համար անհրաժեշտ է Serilog բաժնի WriteTo ենթաբաժնում ավելացնել դրան հատուկ պարամետրերը։

"Serilog": {
    "WriteTo": [
        {
            "Name": "File",
            "Args": {
                "path": "./logs/log.json",
                "rollingInterval": "Day",
                "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
            }
        }
    ]
}

Պարամետրեր

  • Name - Գրելով File նշում են, որ լոգավորումը կատարվում է ֆայլում։
  • Args - Գրանցման ֆայլի կարգավորումները։
    • path - Ֆայլի հարաբերական ճանապարհը appsettings.json ֆայլի նկատմամբ։
    • rollingInterval - Լոգերի գրանցման համար անհրաժեշտ նոր ֆայլի ստեղծման հաճախականությունը։ Այս օրինակում նշված է Day, որ նշանակում է, որ ամեն օրվա լոգերի համար ստեղծվում է նոր ֆայլ։
    • formatter - Լոգերի գրանցման ֆորմատը(JSON, XAML, …): Օրինակում նշված արժեքը առավել հարմար է լոգերի հետ հետագա աշխատանքի համար։

Լոգի գրանցում Seq սերվերում

Seq սերվերում գրանցումը ապահովելու համար անհրաժեշտ է Serilog բաժնի WriteTo ենթաբաժնում ավելացնել դրան հատուկ պարամետրերը։

"Serilog": {
    "WriteTo": [
        {
            "Name": "Seq",
            "Args": {
                "serverUrl": "http://95.140.203.18:8443",
                "bufferBaseFilename": "./logs/buffer"
            }
        }
    ]
}

Պարամետրեր

  • Name - Գրելով Seq նշում են, որ լոգավորումը կատարվում է Seq սերվերում։
  • Args - Գրանցման Seq-ի կարգավորումները։
    • serverUrl - Seq-ի սերվերի հասցեն։
    • bufferBaseFilename - Սերվերի անհասանելի լինելու դեպքում լոգերի գրանցման համար անհրաժեշտ ֆայլի հարաբերական ճանապարհը appsettings.json ֆայլի նկատմամբ։ Սերվերը հասանելի դառնալուն պես ֆայլում գրանցված լոգերը գրանցվում են Seq-ում։

Լոգի ֆիլտրում

Լոգը կարելի գրանցել կիրառելով որոշ ֆիլտրեր։ Ստորև օրինակում ֆիլտրվում է ըստ լոգի ConnectedService դաշտի ‘ArCaP2P’ արժեքի և լոգավորումը պահպանում է ArCaP2P_XXXXXXXX.json անունով ֆայլում (XXXXXXXX-ի փոխարեն գրված ամսաթիվ):

"Serilog": {
  "WriteTo": [
    {
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@p['ConnectedService'] = 'ArCaP2P'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "path": "./logs/ArCaP2P_.json",
                "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                "rollingInterval": "Day",
                "rollOnFileSizeLimit": true,
                "fileSizeLimitBytes": "1000000"
              }
            }
          ]
        }
      }
    }
  ]
}

Վերև լոգի կարգավորման մեջ կարևոր են

  • "Name": "Logger" - Նշում է որ բարդ լոգ է։
  • "Filter" - Կարգավորում է ֆիլտրը։ Տե՛ս նաև Serilog Expressions։

Մի քանի լոգերի կիրառում

Ստորև օրինակում կարգավորված են վերևի երեք լոգերը միարժամանակ։

"Serilog": {
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning",
      "Microsoft.AspNetCore": "Warning",
      "Serilog.AspNetCore": "Warning"
    }
  },
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "./logs/log.json",
        "rollingInterval": "Day",
        "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
      }
    },
    {
      "Name": "Seq",
      "Args": {
        "serverUrl": "http://95.140.203.18:8443",
        "bufferBaseFilename": "./logs/buffer"
      }
    },
    {
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@p['ConnectedService'] = 'ArCaP2P'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "path": "./logs/ArCaP2P_.json",
                "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                "rollingInterval": "Day",
                "rollOnFileSizeLimit": true,
                "fileSizeLimitBytes": "1000000"
              }
            }
          ]
        }
      }
    }
  ]
}

Storage

Սահմանում է ծրագրի աշխատանքի ընթացքում ստեղծվող ֆայլերի (Text reports, տպելու ձևանմուշներից առաջացած ֆայլեր, կամ այլ ֆայլեր) լոկալ պահպանման կարգավորումները։

"Storage": {
    "BaseUri": "https://services8x/bank1",
    "Directory": "C:\\Storage\\Files\\"
}

Պարամետրեր

  • BaseUri - Սերվիսի հասցեն։ ֆայլերի ծրագրային բեռնման (կամ վերբեռնման) համար հասցեի ձևավորման համար։
  • Directory - Ստեղծվող ֆայլերի պահպանման հիմնական թղթապանակի ճանապարհը։