Giter Site home page Giter Site logo

robozonky / robozonky Goto Github PK

View Code? Open in Web Editor NEW
67.0 14.0 23.0 16.14 MB

Automatické investování na zonky.cz

Home Page: http://www.robozonky.cz

License: Apache License 2.0

Java 96.31% Shell 0.32% Batchfile 0.15% FreeMarker 1.25% ANTLR 1.88% Dockerfile 0.10%
investing zonky robot robozonky

robozonky's Introduction

RoboZonky

V důsledku ukončení individuálního investování na platformě Zonky ukončil projekt RoboZonky svou činnost. V tomto repozitáři již nebude probíhat žádná aktivita

robozonky's People

Contributors

dependabot[bot] avatar frantisekz avatar gitter-badger avatar k3a avatar liry avatar lukelaz avatar mark-stopka avatar onovy avatar snyk-bot avatar triceo avatar vvvlc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

robozonky's Issues

Robozonky nefunguje s chybějící hodnotou (a nebo < 200) minimumBalance

Pokud jsem vše správně pochopil, tak by dávalo i smysl i když by byla hodnota minimumBalance menší než 200. Pokud ji však takto nastavím, a nebo vynechám v investiční startegii úplně, tak robozonky skončí s (pokud je hodnota menší než 200, tak se jen změní chybová zpráva):

15:10:30.985 ERROR Failed parsing strategy.
com.github.triceo.robozonky.strategy.InvestmentStrategyParseException: java.lang.IllegalStateException: Minimum balance is missing.
    at com.github.triceo.robozonky.strategy.simple.SimpleInvestmentStrategyService.parse(SimpleInvestmentStrategyService.java:216)
    at com.github.triceo.robozonky.strategy.InvestmentStrategyLoader.load(InvestmentStrategyLoader.java:47)
    at com.github.triceo.robozonky.strategy.InvestmentStrategy.load(InvestmentStrategy.java:43)
    at com.github.triceo.robozonky.app.OperatingMode$1.setup(OperatingMode.java:64)
    at com.github.triceo.robozonky.app.App.processCommandLine(App.java:130)
    at com.github.triceo.robozonky.app.App.main(App.java:136)
Caused by: java.lang.IllegalStateException: Minimum balance is missing.
    at com.github.triceo.robozonky.strategy.simple.SimpleInvestmentStrategyService.lambda$getMinimumBalance$2(SimpleInvestmentStrategyService.java:108)
    at java.util.Optional.orElseThrow(Optional.java:290)
    at com.github.triceo.robozonky.strategy.simple.SimpleInvestmentStrategyService.getMinimumBalance(SimpleInvestmentStrategyService.java:108)
    at com.github.triceo.robozonky.strategy.simple.SimpleInvestmentStrategyService.parse(SimpleInvestmentStrategyService.java:208)
    ... 5 common frames omitted

RoboZonky musí zvládat změny v nedůležitých výčtech

RoboZonky obsahuje některé výčtové typy, třeba jako MainIncomeType. Bohužel neexistuje žádný způsob, jak zjistit, které všechny hodnoty ten výčtový typ může mít - a tedy pokud se v API objeví nějaký typ, se kterým se nepočítalo, RoboZonky zákeřně zemře.

Pro některé výčtové typy je to nevyhnutelné, třeba pro Rating. Ale na MainIncomeType vůbec nezáleží, a RoboZonky to přesto zabije. To je nepřijatelné, a už to na větvi 1.3.x způsobilo tři nové verze.

Jedna možnost je nepoužívat výčtové typy. Druhá možnost je napsat nějakou logiku, která umožní tenhle problém ošetřit bez selhání, ale tam si ještě nejsem jist jak.

Součet cílových podílů pro všechny ratingy může být vyšší než 1

RoboZonky by měl umět i "přeinvestovat" nějaký rating. Bude-li cílový podíl všech ratingů např 50 %, tedy celkem 400 %, Zonky i tak bude investovat.

Tím sice může dojít k přehlcení portfolia jedním konkrétním ratingem, nicméně to lze považovat za problém uživatele, který si tak RoboZonky nastavil.

Paralelní získávání informací o půjčkách z API

Ve chvíli, kdy RoboZonky načítá blokace z peněženky, potřebuje načíst informace o všech půjčkách, které reprezentují. Tato operace nyní probíhá sériově, půjčku po půjčce - to je hrubě neefektivní, v důsledku síťového čekání na odpověď od serveru bychom jich mohli klidně zpracovávat několik najednou.

Není sice příliš pravděpodobné, že by blokací v peněžence bylo výrazně více než nízké jednotky, ale i tak... je to zlepšení.

Znovupoužití tokenu

Robozonky po přihlášení získá od Zonky token. Ten má jistou platnost. Po dobu platnosti není třeba se znovu přihlašovat, stačí token uložit a následně znovu použít.

Nové atributy v peněžence

Po nedávných aktualizacích Peněženky na Zonky se v logu RoboZonky objevuje tohle:

19:37:12.442 [main] DEBUG c.g.triceo.robozonky.remote.Wallet Trying to set value '12000.0' to an unknown property 'creditSum'. Indicates an unexpected API change, RoboZonky may misbehave.
19:37:12.443 [main] DEBUG c.g.triceo.robozonky.remote.Wallet Trying to set value '0.0' to an unknown property 'debitSum'. Indicates an unexpected API change, RoboZonky may misbehave.

Bude potřeba do třídy Wallet přidat dva nové atributy.

Nepovolit více paralelních procesů

Nevyhnutelně jednou přijde doba, kdy bude RoboZonky na něco čekat - třeba na to, až vyprší u lukrativní půjčky CAPTCHA. A protože opakované spouštění RoboZonky je řešeno vně aplikace, může v takovém případě dojít k souběhu dvou a více instancí. Tomu je zapotřebí zabránit.

RoboZonky tedy bude při každém spuštění vytvářet zámek a když nová instance zámek najde, ukončí se.

Chování robozonkyho při údržbě webu zonky.cz

Měl bych námět na vylepšení. Občas se stává, že zonky nasazuje na web novou verzi a úplně se s tím nemažou a ne několik minut/hodin web vypnou s touto hláškou:
image

Chudák robozonky pak začne nemilosrdně padat na ústa s chybou:

ERROR Failed. 
javax.ws.rs.NotAllowedException: HTTP 405 Method Not Allowed 
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.handleErrorStatus(ClientInvocation.java:203) 
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:174) 
at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:60) 
at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:104) 
at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) 
at com.sun.proxy.$Proxy24.login(Unknown Source) 
at com.github.triceo.robozonky.authentication.Authenticator.lambda$withCredentials$0(Authenticator.java:63) 
at com.github.triceo.robozonky.authentication.Authenticator.authenticate(Authenticator.java:156) 
at com.github.triceo.robozonky.authentication.Authenticator.authenticate(Authenticator.java:169) 
at com.github.triceo.robozonky.operations.LoginOperation.perform(LoginOperation.java:38) 
at com.github.triceo.robozonky.operations.LoginOperation.perform(LoginOperation.java:24) 
at com.github.triceo.robozonky.operations.Operation.apply(Operation.java:34) 
at com.github.triceo.robozonky.app.authentication.AuthenticationHandler.login(AuthenticationHandler.java:207) 
at com.github.triceo.robozonky.app.App.invest(App.java:166) 
at com.github.triceo.robozonky.app.App.core(App.java:72) 
at com.github.triceo.robozonky.app.App.main(App.java:87) 
22:04:06.864 ERROR Application encountered an error during setup. 
com.github.triceo.robozonky.app.util.UnrecoverableRoboZonkyException: Login failed. 
at com.github.triceo.robozonky.app.authentication.AuthenticationHandler.login(AuthenticationHandler.java:209) 
at com.github.triceo.robozonky.app.App.invest(App.java:166) 
at com.github.triceo.robozonky.app.App.core(App.java:72) 
at com.github.triceo.robozonky.app.App.main(App.java:87) 

Bylo by fajn, kdyby to neskončilo error hláškou, ale pro tento případ by mohl stačit warning. Chodí mě emaily pokud robot spadne, takže jsem pak zavalen :)

Díky
J.

Informovat o nové verzi

RoboZonky by měl umět informovat uživatele o dostupnosti nové verze.

To bohužel nepůjde udělat jinak než nějakým dotazem do Maven Central, což by potenciálně RoboZonky zpomalilo. Takže to bude zapotřebí dělat na nějakém paralelním vlákně. A možná jen ve chvílích, kdy RoboZonky z nějakého důvodu selže, a mohlo by tedy být nutné updatovat.

Investorský poplatek v peněžence rozbije RoboZonky

Investorský poplatek se v peněžence objevuje jako blokace s číslem půjčky 0. S něčím takovým RoboZonky nepočítá a neplánovaně se ukončí. Díky Janu Jetmarovi za nahlášení a pomoc s odhalením problému.

Zainvestovat jednu konkrétní půjčku

Navrhnul Josef Čejka na Facebooku. Implementaci si představuji následující:

  • Uživatel místo strategie zadá na příkazové řádce číslo půjčky a částku.
  • Uživatelské jméno a heslo zadá jako obvykle.
  • RoboZonky provede tuto jednu konkrétní investici a skončí.

Při počítání podílu ratingu na investicích nejsou brány v potaz splátky po splatnosti

... namísto toho se počítá pouze s těmi penězi, které ještě splatné nejsou. To negativně ovlivňuje strategii, která tak v mezním případě zainvestuje i tehdy, kdy by neměla.

Příklad:

  • Půjčili jste celkem 600 Kč.
  • 200 Kč z toho již bylo včas vráceno.
  • 6 Kč je v prodlení.
  • RoboZonky bude počítat 206 Kč jako vrácených (34 %), zatímco skutečně bylo vráceno jen 200 Kč (33 %.)

Více informací v logu

S tím, jak RoboZonky nabývá na popularitě a lidé hlásí chyby, na které narazili, ukazuje se, že log neobsahuje dostatečné množství informací pro správné pochopení problému.

Přidám do něj:

  • Obsah příkazové řádky, bez hesla.
  • Verzi Javy a operačního systému.

NPE pokud je prázdné portfolio

Spouštím RoboZonky v DRY režimu a dochází k této výjimce:
ERROR Unexpected error. java.lang.NullPointerException: null at com.github.triceo.robozonky.PortfolioOverview.calculate(PortfolioOverview.java:55) at com.github.triceo.robozonky.Investor.investOnce(Investor.java:162) at com.github.triceo.robozonky.Investor.invest(Investor.java:194) at com.github.triceo.robozonky.app.App.invest(App.java:217) at com.github.triceo.robozonky.app.App.main(App.java:146)
Tipuji, že je to způsobené tím, že spouštím RoboZonky nad úplně novým účtem, který má sice naplněnou peněženku, ale zatím žádnou investici.
Log je v přiloženém souboru robozonky.txt.

Zonky zavedlo CAPTCHA

Nově bude na serveru zonky umístěna captcha první 2 minuty po vložení půjčky.
Bude umět robozonky captchu obejít?
Nevím jak to Lucka myslela tím blokováním robotů, doufám že mě nebloknou protože jej používám, ale jen myslela tu captchu. Možná by měla Lucie technické řešení přetížení Zonky nechat na odbornících a nevymýšlet kraviny které nic nevyřeší...

Primární zdroj dat Zotify

Vzhledem k tomu že Robozonky stejně čtou data ze Zotify, navrhuji, aby si data o Tržišti nejdřív načetly ze Zotify, a až pokud bude existovat nějaká relevantní půjčka daná strategií, přihlásily se na Api Zonky a po dalších kontrolách provedly investici.

Má to několik výhod:

  • Výrazné zmenšení zátěže serverů Zonky, tudíž menší potencionální problémy ze strany Zonky
  • Prakticky vyřešení dalších problémů Robozonky (servery zonky v Maintenanci, usínání, ...)
  • Zmenšení zátěže počítače, na kterém Robozonky běží

Nevýhoda:

  • Nevím, jak by se toto dalo aplikovat v případě Drools tabulek... Workaround by byl, že by jely postaru.

Předpokladem pro tyto výhody je, že jsou Robozonky převážně používány pro půjčky, které velmi rychle mizí. Pokud by někdo investoval do jakékoliv (tj. bez omezení např délky) A++, A* apod. byl by rozdíl nulový, takové půjčky jsou na tržišti stále.

Nabízím v případě zájmu i implementaci této featury.

Unexpected error. java.lang.IllegalStateException: Duplicate key Investment

V kontextu této chyby bohužel mám logování jen na úrovni INFO, ale snad to i tak pomůže:

15:39:09.607 [main] INFO c.g.t.r.operations.InvestOperation Invested 400 CZK into loan 43036.
15:39:09.667 [main] ERROR com.github.triceo.robozonky.app.App Unexpected error.
java.lang.IllegalStateException: Duplicate key Investment{amountDue=null, currentTerm=34, dpd=0, interestRate=0.084900, loanName='Refinancování půjček', loanTermInMonth=34, rating=AA, paymentStatus='OK'} extends BaseInvestment{id=258751, loanId=42893, amount=200}
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1253)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.github.triceo.robozonky.Investor.mergeInvestments(Investor.java:67)
at com.github.triceo.robozonky.Investor.invest(Investor.java:213)
at com.github.triceo.robozonky.app.App.invest(App.java:171)
at com.github.triceo.robozonky.app.App.core(App.java:72)
at com.github.triceo.robozonky.app.App.main(App.java:87)
15:39:09.681 [main] INFO com.github.triceo.robozonky.app.App Your version of RoboZonky seems up to date.

Budou-li prospěšné nějaké další detaily pokusím se s tím pomoct.

Díky
J.

Běh na NASu od Synology

Ahoj,
spustil sem tento skript jako úlohu na Synology Discstation 6 , kde běží java 8. Vrací mi to tuhle hlášku:
13:23:19.016 [main] INFO com.github.triceo.robozonky.app.App - RoboZonky v1.4.2 loading. 13:23:19.051 [main] DEBUG com.github.triceo.robozonky.app.App - Running Oracle Corporation Java v1.8.0_65 on Linux v3.2.40 (arm, en_US). 13:23:19.991 [main] DEBUG com.github.triceo.robozonky.app.CommandLineInterface - Processing command line: [-s moje.cfg, -u [email protected]]. 13:23:20.790 [main] ERROR com.github.triceo.robozonky.app.AuthenticationHandlerProvider - Failed reading guarded storage. java.security.KeyStoreException: JCEKS not found at java.security.KeyStore.getInstance(KeyStore.java:851) at com.github.triceo.robozonky.app.util.KeyStoreHandler.create(KeyStoreHandler.java:76) at com.github.triceo.robozonky.app.AuthenticationHandlerProvider.newSecretProvider(AuthenticationHandlerProvider.java:39) at com.github.triceo.robozonky.app.AuthenticationHandlerProvider.getSecretProvider(AuthenticationHandlerProvider.java:81) at com.github.triceo.robozonky.app.AuthenticationHandlerProvider.apply(AuthenticationHandlerProvider.java:105) at com.github.triceo.robozonky.app.App.processCommandLine(App.java:59) at com.github.triceo.robozonky.app.App.main(App.java:85) Caused by: java.security.NoSuchAlgorithmException: JCEKS KeyStore not available at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) at java.security.Security.getImpl(Security.java:695) at java.security.KeyStore.getInstance(KeyStore.java:848) ... 6 common frames omitted 13:23:21.606 [main] DEBUG com.github.triceo.robozonky.app.App - RoboZonky terminating with 'ERROR_WRONG_PARAMETERS' return code.

V čem může být problém?

Umožnit nastavit strop investované částky.

Investoři, kteří chtějí ze Zonky pravidelně odčerpávat zisky, potřebují zajistit, aby RoboZonky nezainvestoval výše, než nějakou konkrétní částku. Ve strategii toto implementujeme konkrétním strop.

Zvednout pokrytí testy nad 60 %

RoboZonky používá ke sledování test coverage PIT Mutation Testing.

Zatímco modul robozonky-core bez potíží překoná 75 % hranici zabitých mutací, globálně máme nastaveno daleko méně. To je zejména kvůli modulu robozonky-app, který je pokryt mizerně.

To se musí změnit.

Zpracování textu příběhu

Robozonky by mohly ve strategii i brát v potaz text příběhu. Nechci totiž dávat peníze do půjček, u které se žadatel neobtěžoval zadat jakýkoliv text. Dává tak možná najevo, že to ani splatit nehodlá. A koneckonců, Zonky staví na příbězích.

Jedno řešení by bylo zadat podmínku jako regulární výraz (např .{100,}). Je to sice trochu overkill, ale zas se tím dají odfiltrovat např příběhy psané CAPS LOCKEM, nebo skutečně se řídit dle klíčových slov.

V případě zájmu nabízím i implementaci.

Pouziti pouze maximumLoanAmount.default

Spis Feature Request.
Situace: Je mi jedno jaka moje investice bude mit podil v celkove pujcce, ale maximalne investuji napr. 1000 CZK do jedne pujcky. (Nejnizsi pujcky jsou 20k, 30k+ a to je jeste ojedinele, takze podily jsou stejne v radech jednotek a nizsich radu procent). Je to relevantni user story nebo jen muj vymysl?

Idealni situace: v cfg souboru specifikuji jen: maximumLoanAmount.default = 1000. Bez maximumLoanShare.XXX

Nyni to vyhodi Exception java.lang.IllegalStateException: Investment strategy is incomplete. Missing value for 'maximumLoanShare' and rating 'AAAAA'. Domnivam se, ze z SimpleInvestmentStrategyService, funkce getValue().

Ano, workaround je zrejmy, predpokladam ze stejny vysledek ma nastaveni pro vsechny na maximumLoanShare.XXX = 1. Ci jinou vysokou hodnotu. Ale jsou to radky nastaveni navic.

Ano, Ne?

NullPointer

Kdyz nemam jeste zadne pujcky a pustim robozonky obdrzim:

14:12:55.114 [main] ERROR com.github.triceo.robozonky.app.App Unexpected error.
java.lang.NullPointerException: null
at com.github.triceo.robozonky.Operations.calculateSharesPerRating(Operations.java:101)
at com.github.triceo.robozonky.Operations.identifyLoanToInvest(Operations.java:228)
at com.github.triceo.robozonky.Operations.invest(Operations.java:292)
at com.github.triceo.robozonky.app.App.invest(App.java:194)
at com.github.triceo.robozonky.app.App.main(App.java:132)
14:12:55.114 [main] DEBUG com.github.triceo.robozonky.app.App RoboZonky terminating with 'ERROR_UNEXPECTED' return code.

RoboZonky nenačítá blokace

Po opravě #39 se vloudila do RoboZonky off-by-one chyba která způsobí, že aplikace nezaregistruje téměř žádné blokace. Investování tedy může nečekaně a tiše selhat.

Strategii vadí bílé znaky

Při čtení strategie je potřeba, aby na konci řádků nebyly prázdné znaky - jinak RoboZonky selže s výjimkou.

Ochrana citlivých údajů

RoboZonky má v tuto chvíli dvě relativně choulostivá místa:

  • Jednak se heslo uloží do paměti aplikace, kde jej teoreticky může útočník přečíst. (Má-li přístup k systému, kde RoboZonky běží, což by neměl.)
  • Druhak, pokud si to uživatel specificky vyžádá, se na disk uloží access token - ten umožní komukoliv, kdo jej zná, pracovat jako autentizovaný Zonky uživatel.
  • Stejný token se také vypisuje do logů.

Ani jedna z těchto situací není žádoucí, a bylo by záhodno je vyřešit. Nabízí se KeyStore.

RoboZonky musí umět "usnout"

Občas RoboZonky nemá do čeho investovat, protože v peněžence nejsou peníze. Zároveň se dá na základě očekávaných splátek rozumně předpokládat, kdy v peněžence peníze znovu budou.

RoboZonky by měl tuhle situaci detekovat a nespouštět se, dokud peníze v peněžence nepřistály. Jednak to pomůže trochu ulevit serverům Zonky, druhak při změnách v API nebude RoboZonky selhávat tak často, což pomůže těm z nás, kterým v takovém případě chodí e-mail. :-)

Dosud nezainvesovaný rating

Pokud zatím nemám například u ratingu AA žádnou investici, tak RoboZonky nepozná, že u toho ratingu mám zatím 0% a neoznačí tento rating jako low on portfolio, tudíž ani nehledá v tržišti, ačkoliv by měl podle strategie.

Rozhodovací tabulky

Soubor strategií je relativně komplikovaný (a bude ještě komplikovanější po #23) a přitom neumožňuje nadefinovat závislosti jednotlivých parametrů na sobě. (Třeba pokud bych chtěl, aby se strategie pro daný rating chovala různě pro půjčky větší než X a menší než X, mám smůlu.)

To by se dao vyřešit s použitím rozhodovacích tabulek, konkrétně Drools Decision Tables. Ty se dají psát jak v CSV, tak v XLS, takže by mělo být relativně jednoduché pro běžné uživatele takové tabulky vytvořit.

Součástí téhle issue by mělo být také vytvoření ukázkových tabulek, ať to nemusí lidé vymýšlet sami.

Udržovat minimální zůstatek

Pro investory, kteří chtějí každý měsíc ze své peněženky vybírat peníze, není stávající chování RoboZonky ideální, neboť zainvestuje "každou korunu," kterou v peněžence najde. Do strategie musí přibýt možnost nastavit minimální zůstatek, pod který se účet nikdy nesmí dostat.

RESTEasy warning

Pri stusteni dostavam nasledujici warning:

17:58:18.624 WARN RESTEASY002155: Provider class org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider is already registered. 2nd registration is being ignored.

RoboZonky přestalo fungovat ("OTHERS_MAIN")

Nevím, jestli Zonky nezměnilo nějak své API (včera večer byl krátkodobý výpadek webu, ale dnes ráno ještě RoboZonky fungoval), ale dnes kolem poledne přestalo RoboZonky fungovat. Podle chyby bych to tipoval, že Zonky přidalo další typ příjmu ("OTHERS_MAIN").

Fix je tady #37 .

Napadlo mne, jestli by nešlo RoboZonky upravit tak, aby bylo robustnější, a zvládlo fungovat i s neznámým typem příjmu?

13:35:18.909 ERROR Unexpected error.
javax.ws.rs.client.ResponseProcessingException: javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.github.triceo.robozonky.remote.MainIncomeType from String value 'OTHERS_MAIN': value not one of declared Enum instance names: [ENTREPRENEUR, EMPLOYMENT, PENSION, SELF_EMPLOYMENT]
 at [Source: org.apache.http.conn.EofSensorInputStream@10cf09e8; line: 1, column: 620] (through reference chain: java.util.ArrayList[0]->com.github.triceo.robozonky.remote.Loan["mainIncomeType"])
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:141)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:60)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:104)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76)
    at com.sun.proxy.$Proxy35.getLoans(Unknown Source)
    at com.github.triceo.robozonky.Investor.investOnce(Investor.java:176)
    at com.github.triceo.robozonky.Investor.invest(Investor.java:205)
    at com.github.triceo.robozonky.app.App.invest(App.java:217)
    at com.github.triceo.robozonky.app.App.main(App.java:146)
Caused by: javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.github.triceo.robozonky.remote.MainIncomeType from String value 'OTHERS_MAIN': value not one of declared Enum instance names: [ENTREPRENEUR, EMPLOYMENT, PENSION, SELF_EMPLOYMENT]
 at [Source: org.apache.http.conn.EofSensorInputStream@10cf09e8; line: 1, column: 620] (through reference chain: java.util.ArrayList[0]->com.github.triceo.robozonky.remote.Loan["mainIncomeType"])
    at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:285)
    at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readEntity(ClientResponse.java:181)
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:213)
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:105)
    ... 8 common frames omitted
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.github.triceo.robozonky.remote.MainIncomeType from String value 'OTHERS_MAIN': value not one of declared Enum instance names: [ENTREPRENEUR, EMPLOYMENT, PENSION, SELF_EMPLOYMENT]
 at [Source: org.apache.http.conn.EofSensorInputStream@10cf09e8; line: 1, column: 620] (through reference chain: java.util.ArrayList[0]->com.github.triceo.robozonky.remote.Loan["mainIncomeType"])
    at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:55)
    at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:907)
    at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:130)
    at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:84)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:520)
    at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:258)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
    at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1470)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:912)
    at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:121)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:61)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53)
    at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:55)
    at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:251)
    ... 11 common frames omitted

Logy do souboru nejsou kompletni

V nejakych pripadech se mi stava, ze logy zapisovane do souboru nejsou kompletni ... Resp. je tam jenom cast.

A je jedno, jaky lvl je nastaven (konkretne ja mam nastaveno logovani do dvou souboru zaroven - trace a info level.

14:52:50.446 [main] INFO com.github.triceo.robozonky.app.App RoboZonky v1.4.2 loading.
14:52:57.772 [main] INFO o.d.c.k.b.impl.KieRepositoryImpl KieModule was added: MemoryKieModule[releaseId=org.default:artifact:1.0.0-SNAPSHOT]
14:52:57.818 [main] INFO com.github.triceo.robozonky.app.App ===== RoboZonky at your service! =====
14:52:58.452 [main] WARN o.jboss.resteasy.resteasy_jaxrs.i18n RESTEASY002155: Provider class org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider is already registered. 2nd registration is being ignored.
<<< EOF

Logging není nastavitelný "zvenčí"

V tuhle chvíli je logback.xml, jediný způsob nastavení logování, je skrytý uvnitř jednozo z JARů. To neumožňuje rozumné nastavení logování, a to je potřeba změnit.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.