SeAT - β-development - Page 2
Crypta Electrica
13 Jan 2025 23:22
No my bad, it is a month that its blocked for
Wibla
13 Jan 2025 23:23
And for nullsec at least... Being able to designate a char to to first try lookups would be useful
Crypta Electrica
13 Jan 2025 23:23
Well yes but no. We try all chars that have a link to a structure
Yes order would help, but not in the long term as we have seen these issues persist
Wibla
13 Jan 2025 23:24
My point is that the odds are good that a holding corp char has access
Yes, well... CCP are not exactly gold standard programmers
Crypta Electrica
13 Jan 2025 23:24
Usually its not the own-corp / own-alliance structures that are the problem. Its all the other stuff scattered over new-eden
Wibla
13 Jan 2025 23:25
Yeah
Ofc part of why this shit is annoying to me is because I consider all errors that show up on the main seat page to be stuff that I actually have to look at and solve
Crypta Electrica
13 Jan 2025 23:27
Yeah thats the other thing I am looking at, is how not to clutter the failed jobs
Wibla
13 Jan 2025 23:27
Because it indicates that I might annoy ccp soon
(imo)
Yeah
Akov
13 Jan 2025 23:27
I did some querying on my instance and found the folk that had dropped a trit in every structure in all of eve
and just deleted those toons
really helped me
Crypta Electrica
13 Jan 2025 23:28
Keeping in mind all of these calls that fail are errors that increase your ESI error count. But we set a stricter limit on the error rate for citadels.
Wibla
13 Jan 2025 23:28
Yeah I should look into that
Akov
13 Jan 2025 23:29
also just asked folk to like...delete that random ibis in nullsec station 9999
Wibla
13 Jan 2025 23:41
Not sure if it's possible to add more default profiling for this
Crypta Electrica
14 Jan 2025 03:25
I had kind of hoped that by Silencing the job it would also not appear in the failed jobs queue...
Wibla
14 Jan 2025 07:19
lol yeah
leonjza
20 Jan 2025 15:09
.ping
.ping
SeAT-Bot
20 Jan 2025 15:10
pong!
leonjza
20 Jan 2025 15:12
.ping
SeAT-Bot
20 Jan 2025 15:12
pong!
Crypta Electrica
25 Jan 2025 02:51
.docs
SeAT-Bot
25 Jan 2025 02:51
@user_301981661761896449, available .docs commands are: .docs.upgrade, .docs.moons, .docs.squads, .docs.donate, .docs.troubleshooting, .docs.requirements, .docs.bugs, .docs.help, .docs.auth, .docs.email, .docs.plugins, .docs.sso, .docs.install.docker, .docs.install.manual, .docs.logs
Crypta Electrica
25 Jan 2025 02:51
yay!
Question for @role_822447791301066782 , can people confirm if the IPs they see in the security log are showing as valid IPs, or are cloudflare / other proxy IP address
leonjza
25 Jan 2025 05:11
looks like arm builds are failing https://github.com/eveseat/seat-docker/actions/runs/12961491477
Wibla
25 Jan 2025 08:39
valid, using haproxy on pfsense as a reverse proxy in front of SeAT
Crypta Electrica
25 Jan 2025 11:49
But my are you behind cloud flare?
Wibla
25 Jan 2025 11:50
no, I use haproxy in front of all web services
I am looking at cloudflare though...
heh
Crypta Electrica
25 Jan 2025 11:51
Yeah it's weird that gd is failing to build.. Error out of libtool. Will see how next build goes.. I do need rapidly to get to redoing the build pipeline though
Wibla
25 Jan 2025 11:52
I wonder how SeAT performs on ARM π
maybe I should try my database on a pi π
Crypta Electrica
25 Jan 2025 11:56
It's actually not too bad xD noting the hardware constraint. At times last year my dev server was on a zynq
I have always wanted in some respects to try again with the Oracle cloud free tier offering. But my account got rooted when I tried to change tenants and I've been unable to recover it.
But 4 core 20gb ram is not a bad offering. Can't remember what iosteal was like though
Interesting the build failure this time is in a different compilation step... Not consistent.
Wibla
25 Jan 2025 12:54
that's actually pretty good
lol
Crypta Electrica
25 Jan 2025 13:33
Based on the errors I am seeing in the logs, it looks like something to do with the cross compilation failing due to an interaction with qemu. Based on that I suspect something was updated on the github runners that is affecting us. I have disabled the arm64 build for now to let the passing builds through. Will investigate further in the morning.
Ariel Rin
25 Jan 2025 14:18
Fuck
I really hope my runners havenβt died
I touched that once two years ago and I never want to go back into that hell again
Why isnβt this just standard in docker
we use https://github.com/tonistiigi/binfmt for reference https://gitlab.com/allianceauth/allianceauth/-/blob/master/.gitlab-ci.yml?ref_type=heads#L216-238
Kiba
25 Jan 2025 16:44
My Docker instance is behind Cloudflare, Iβve put in an override file to set a particular parameter to allow the proper client IP to pass through. I had meant to share for someone more intelligent than myself, but time got away from me. Once I manage to get to my machine Iβll share it.
Asrik
25 Jan 2025 16:54
I too using docker with Cloudflare tunnel. The tunnel is connected with the same docker network with seat-docker-front-1 connecting to it. I do see the IPv4 and IPv6 every time there is an open connection to my seat.
Kiba
25 Jan 2025 17:41
My current configuration is Cloudflare -> Traefik (self managed) -> SeAT.
Prior to the below change, I would only get the Traefik IP address (so the Docker bridge address) in the logs after also putting it behind Cloudflare. Other apps didn't have any issue getting the client IP passed through.
I changed this line here:
https://github.com/eveseat/seat/blob/0a5db370550020e6badb7ecc1db365170538133a/app/Http/Middleware/TrustProxies.php#L15
to
protected $proxies = '0.0.0.0/0';
after a ton of digging around documentation and forums - here's a few I bookmarked that mention it. There may be some addition to it for IPv6 as mentioned in the second link, but proper client IPv4/IPv6 addresses are passing through with just the above so π€·
https://github.com/laravel/framework/issues/49371#issuecomment-2045116446
https://github.com/fideloper/TrustedProxy/issues/115#issuecomment-469459016
I believe this is only relevant should you have Cloudflare (or similar) in front of a reverse proxy, in front of SeAT.
FremontDango
25 Jan 2025 19:31
I would always prefer NGINX with a properly configured ngxhttprealip_module to handle the reverse proxy IP stuff, bypassing Laravel altogether
TrustProxies.php is only relevant if the FastCGI server is not capable of putting real ip into REMOTE_ADDR
Crypta Electrica
26 Jan 2025 01:46
Haha yeah... Ours were setup by qu1ckkkk, and I have played with them over time and didnt enjoy the experience that much.. If it were not for multi-arch it would be too bad but yeah
That said ours need a refresh anyway as we are on a much older version of some of the actions plugins. But unfortunately some of those plugins changed how they handle artefacts and I was having trouble getting all architectures to be published
We do deep down also use binfmt
/usr/bin/docker pull docker.io/tonistiigi/binfmt:latest
Well that would be right... Building for arm64 works when I run it in my fork....
===>>> RANT BELOW <<<===
So.... I do not understand why, but cross compilation to arm using qemu seems fragile and inconsistent on github actions. Multiple builds of the same dockerfile couuld pass or fail, and fail in different locations. There was one common them in the failures in that they would always occur when adding a php extension. It would always be in the compilation phase but would vary by which extension failed, and failure mode (select one from SegFault, InvalidCompilerFlags, LinkerFlagsPassedToCompiler, CompilerWrongArchitecture etc).
II have spent most of my free time the past few days either researching obscure compiler features and qemu flags, or bruteforce trial and error testing various changes to the build.
FINALLY I HAVE VICTORY (i think, watch me merge this into the eveseat repo and it still fail π± ). Turns out that even though github actions does not show our repo as eligible for arm64 architecture builders, if I specify it then it works on preview basis. Side benefit is it massively speeds up the build times due to the native compile.
I dont want to think about the number of grey hairs that this has generated for me.... But hey at least I still have hair /s?
Final piece of rant.... I am ready to incinerate my keyboard.... I have a Logitech G613 which I have loved for a nuumber of years.. Turns out these have known fauults with the switches that I didnt know about. So I get massive amounts of double typed characters, and missed characters. I have tried all the 'fixes' from various threads but no improvement. So now accepting recommendations for a new keyboard of similar characteristics ((though could be a little quieter).
===>>> END RANT <<<===
THE ACTUALLY CONSISTENTLY PASSING BUILDS NOW!!
Ok WTF GHA!!!!
now getting random failures on the arm runner where even the setup-qemu action is failing...
Error: docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: unable to start unit "docker-XXXX.scope" (properties [{Name:Description Value:"libcontainer container XXXX"} {Name:Slice Value:"system.slice"} {Name:Delegate Value:true} {Name:PIDs Value:@au [3637]} {Name:MemoryAccounting Value:true} {Name:CPUAccounting Value:true} {Name:IOAccounting Value:true} {Name:TasksAccounting Value:true} {Name:DefaultDependencies Value:false}]): Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms): unknown.
AjDuLion
31 Jan 2025 14:23
sooo can I buy arm cpu's now to run it π ?
runs
Crypta Electrica
31 Jan 2025 14:23
I mean... Ampere CPUs are actually kinda awesome for some things π
And despite who it is, there is a company offering a generous free VPS on arm cpus
AjDuLion
31 Jan 2025 14:26
I don't know why but i want https://buyzero.de/products/20-x-cm5-rack-cluster-kit-with-19-enclosure-preorder
Ariel Rin
31 Jan 2025 14:41
i have been impressed by hetzer offerings in the arm space
very affordable
Gigi
31 Jan 2025 15:57
Is this oracle?
Crypta Electrica
31 Jan 2025 21:25
Yeah
Akov
1 Feb 2025 01:56
guh, I targgeted the wrong branch?
do I need to fork the dysath repo?
Crypta Electrica
1 Feb 2025 06:34
No should be to that repo.. But looks like you originallyy based off of a v4 master then merged to v5 instead maybe? Not sure.
Akov
1 Feb 2025 06:35
ill try it again
thought I went from your master and back, but ill try again
Wibla
2 Feb 2025 17:59
π
recursive_tree
25 Feb 2025 21:53
@user_301981661761896449 What do you think? The best solution would be to launch jobs fetching the names before the notification runs, but I'm not sure where we could schedule them (at least without introducing a new subsystem for it).
We can't do it inside the notification since the information-gathering job must complete before the notification job starts.
The notification endpoint job or the observer actually dispatching notifications doesn't know about the structure of the notification text data, so doing it there is currently also not easily possible.
Pymous
25 Feb 2025 22:00
Don't want to interfer, and I don't know how it's implemented in SEAT (for the ESI Job to get infos), but maybe you could trigger the jobs from within the notification using dispatch_sync() ?
recursive_tree
25 Feb 2025 22:01
I thought about it, but I'm a bit scared of the interactions with the job retry logic and all that stuff. It might still be the best solution though.
on the other hand, a POS getting attacked is rare enough that it won't matter too much
Pymous
25 Feb 2025 22:02
Yeah, if the pull fail, then what do you do, and do you retry for eternity π
If it's a hassle, I'm sure getting links instead of actual names is good enough
When we got ours bashed, I couldn't care less of who was doing it, I was more interesting in actually knowing it was happening, eheh
recursive_tree
25 Feb 2025 22:06
I donβt think we should give up before even thinking. But the thinking shouldnβt block a working, even if not perfect, solution. We can also improve it later.
Pymous
25 Feb 2025 22:16
If I get an InvType like that : $type = InvType::find($this->notification->text['typeID']);
I can access the name like that : $type->typeName, right ?
Weyland
25 Feb 2025 22:17
I think that's correct
Maybe try findOne if that doesn't work
I think such a method exists but not sure without the code at hand π
Pymous
25 Feb 2025 22:29
Ok, I think I'm done doing the Discord/Mail notification, and making the sample one ; do I just PR that, and you test it ? Or there is a way for me to run the test ?
By the way, I think there is a little mistake in
notifications\src\resources\lang\en\alerts.php, line 58, you have a , instead of a =>
(I made a commit on my fork for it, for when I push the notification changes)
PR is up ; I can always fix stuff if it's not up to standard ! Thanks for all the help
Crypta Electrica
26 Feb 2025 01:23
Hmmm.. So there is a couple of options here that I can think of.. All with tradeoffs
First off though, thank you for the PR
In the web side of SeAT, we tend to pass the ID raw, and we have some JS that will reach out to ESI and look for the id -> name mapping
Now that cannot work here of course... So the methods we have to access the mapping is through either the concrete classes (CharacterInfo, CorporationInfo etc) or through the UniverseName mapping.
If we dont have the data we can ask ESI for it but then we need to run another job, which brings the problems that recursive_tree highlights above where we are now at the mercy of middleware, retries and things not going well.
I am inclined to accept the PR as is with the links..
But I think that what we should consider is a more universal internal (non JS) method to resolve an ID to a name that can be used in a lot of places where we need to make that transition in the future.
Wibla
26 Feb 2025 05:35
okay so just on general principle, relying on ESI to look up IDs
is a recipe for disaster
imo
if the ESI has a bad day, you are fucked
and the ESI has a bad day more often than not
look it up the first time and save it in a database table, if you must
Crypta Electrica
26 Feb 2025 06:37
I mean thats the whole point.. We want to pull from the database if it exists there, but the case we need to address is if it is not. Which for random agressor corps its probably more likely than not we dont have it.
Alliances we should in theory have them all... But not necessarily
Wibla
26 Feb 2025 06:50
right, yeah
I misread that a bit
sorry
Moppa
26 Feb 2025 08:48
Getting the notification with a zkill link or just the ID so you quickly can look it up on EveWho is the main thing that matters.
For repeat offenders its neat to get the name, but since these pings will trigger a scouting action to get numbers and composition while people log for QRF the name isn't that important.
So triggering a job to look up the name later and send the ping right away is IMO an OK tradeoff.
Pymous
26 Feb 2025 09:00
Maybe I'm a bit naive, but if ESI is the only possible offender in that cycle, adding a timeout on it and just "successfully fail" the job could be an option ? I saw multiple default strings here and there.
If the ESI doesn't comply in a timely fashion, you return a blank character or null, or whatever ; and next time you need that info, you retry, but you don't automatically retry
(By the way, I also did a new commit to my PR to pass the checks, sorry for the delay)
Crypta Electrica
26 Feb 2025 13:25
That's my thoughts for the most part, in that if we don't have the data we try and fetch it and if that fails it falls back to a default. But that said, I don't think that logic belongs in the notifications package itself.
Weyland
26 Feb 2025 15:07
I created https://github.com/eveseat/seat/issues/922 and been trying to figure out what could be causing information to go missing but haven't been able to determine exactly what is going on. Is there someone with some insight in jobs, and especially the part about updating planetary contents that might shine some light on this?
Looking at the code it all seems fine yet the API results include information that is somehow not stored in the database
Pymous
26 Feb 2025 15:46
@user_300654930803425281 I'm not gonna comment on the issue yet, but are you sure about that part : To make it easier, I listed the contents of 2 planets and their launchpad.
Because you list Chiral Structures, for example, being on Planet X, but it's not on your Launchpad, it's in one of your Barren Advanced Industry Facility
Weyland
26 Feb 2025 15:49
Yes, 100%. The API returns 6 P0 being in the launchbad and flowing from there to the factories. Yet only 4 are saved as being in the launchpad to the database.
Planet X launchpad currently has:
Bacteria 3200 608.0 m3
Biofuels 3200 608.0 m3
Biomass 3200 608.0 m3
Chiral Structures 3200 608.0 m3
Industrial Fibers 3200 608.0 m3
Plasmoids 3200 608.0 m3
And planet XI launchpad currently has:
Biomass 3200 608.0 m3
Chiral Structures 3200 608.0 m3
Oxygen 3200 608.0 m3
Precious Metals 3200 608.0 m3
Reactive Metals 3200 608.0 m3
Silicon 3200 608.0 m3
(I fill them with stacks of 8000 at the same time hence the quantity of the items are the same but the P0 is different but overlaps with another)
Pymous
26 Feb 2025 16:00
Is it possible you did the ESI export before/after moving stuff on your PI (from your screen or your listing above) ?
Because your ESI response show 8320 Chiral Structures in one Barren Launchpad and 40 in 6 Barren Advanced Industry Facility
But I can't find another launchpad with Chiral anywhere in your ESI
Weyland
26 Feb 2025 16:22
At the time of writing, the item amount for each P0 was indeed 8320 on both planets. And that was correct since I had some left overs in the launch pad. Querying the ESI endpoint correctly reflected the contents of both planet launchpads but after checking the database, duplicate items like chiral and biomass were missing from one planet.
I queried the ESI after I put the items in and it showed the same number believing that ESI correctly updated and showing 6 resources on planet X launchpad and planet XI launchpad.
Let me have another look
Planet X (40113382) lists:
{
"contents": [
{
"amount": 7520,
"type_id": 2401
},
{
"amount": 7520,
"type_id": 3779
},
{
"amount": 7520,
"type_id": 2389
},
{
"amount": 7520,
"type_id": 2393
},
{
"amount": 7520,
"type_id": 2396
},
{
"amount": 7520,
"type_id": 2397
}
],
"latitude": 1.0240000486373901,
"longitude": 1.6139999628067017,
"pin_id": 1048262989138,
"type_id": 2544
},
In the launchpad.
Planet XI (40113385) lists:
{
"contents": [
{
"amount": 7520,
"type_id": 2401
},
{
"amount": 7520,
"type_id": 3683
},
{
"amount": 7520,
"type_id": 9828
},
{
"amount": 7520,
"type_id": 3779
},
{
"amount": 7520,
"type_id": 2398
},
{
"amount": 7520,
"type_id": 2399
}
],
"latitude": 1.0240000486373901,
"longitude": 1.6139999628067017,
"pin_id": 1048263045191,
"type_id": 2544
},
Included the full response from ESI.
Included a screenshot from the database: 'SELECT * FROM character_planet_contents WHERE pin_id IN (1048263045191,1048262989138) LIMIT 50' that results in 10 rows instead of 12.
That the amounts are off is because of ESI and their update interval on those things, which I'm aware of and is no problem. It's the two missing resources that are in the ESI but not in the SeAT database that I'm trying to solve.
recursive_tree
26 Feb 2025 22:01
sorry for not responding on the issue. I also don't see the issue when glancing at the code. I'll have to see how I go about trying to reproduce it though. Having to set up PI on a character just for it would suck :)
Weyland
26 Feb 2025 22:04
Oh, no problem! I was looking at an empty character with minimal skills to see if I can easily reproduce it with just some PI in a launch pad and that's it
Haven't gotten around to that just yet
1 toon, 2 planets, 2 launchpads with the resource list as mentioned in the issue. 10 of reach resource. See what happens
I did see
UNIQUE planet_id, pin_id, type_id
And was wondering if character_id should be part of that too
I think that might be the problem but I'm not sure
recursive_tree
26 Feb 2025 22:07
It's probably at least worth investigating
Weyland
26 Feb 2025 22:08
On the other hand, pin_id should already make it unique but I'll see if I can dig something up or test something
recursive_tree
26 Feb 2025 22:08
Would you mind sharing a full response? Then I could do some hacky stuff to feed that data in instead of setting up PI. You can also send it in private and anonymize some infos like system or whatnot
Weyland
26 Feb 2025 22:09
The two responses above are the full ESI API responses if that helps
recursive_tree
26 Feb 2025 22:09
sorry, I only checked the issue
Weyland
26 Feb 2025 22:09
Straight from the Swagger interface
recursive_tree
26 Feb 2025 22:09
thanks
Weyland
26 Feb 2025 22:09
Awesome!
Pymous
27 Feb 2025 09:37
Thanks to everyone that helped for the making and validation of my PR, I'm happy it was so smooth with you guys !
I understand that it doesn't warrant a version change, but is there an easy way to update to that codebase using the docker install ? Is it using the latest release ? Or can I tell it to use the main/master ?
Crypta Electrica
27 Feb 2025 09:38
Not sure what you mean sorry? As in to pull in that change?
Pymous
27 Feb 2025 09:38
Yep, but on a production install ; do I just update the image and it's gonna fetch the master ?
Crypta Electrica
27 Feb 2025 09:40
So in general if you want to pull in a branch for a docker install you can add an entry in the plugins var in .env like eveseat/notifications:dev-master. But if you wait about 10m or so, I will tag a new release on the notifications package which will trigger a new docker image to build
Pymous
27 Feb 2025 09:40
Oh, I can definetly wait 10 minutes, I'm at work, I shouldn't even think about it π
Crypta Electrica
27 Feb 2025 09:40
Hehe π
Thank you for your PR π
Pymous
27 Feb 2025 09:41
Thanks again for making it so smooth, SEAT is an impressive piece of work
Crypta Electrica
27 Feb 2025 09:41
It certainly has a long history π
I do hope that going forward we can keep the community support we have. Also wrt notifications in particular its also one of the parts of seat I 'want' to work on to make things easier.. One of the main pain points being the ability to add deduplication as discussed prior
Pymous
27 Feb 2025 09:58
Yeah, I'm not familiar enough with SEAT inner working to be really useful, and same about ESI actually being reliable or not to help with a decision, but I'm interested and might see if I can be of any use
recursive_tree
27 Feb 2025 10:00
You did great! You basically figured it out on your own. Discussing some things for how to implement it is totally normal, crypta and I do it all the time.
Honestly, any effort is appreciated, we are rather understaffed. And you can only learn the inner workings of SeAT by actually working on it.
Crypta Electrica
27 Feb 2025 10:08
Exactly, couldnt agree more! We really value the effort you have made! And we all start somewhere, it wasnt that long ago that I picked up working on SeAT plugins as my first ever php project let alone laravel.
Pymous
27 Feb 2025 10:20
Thanks for the kind words ! I'm pretty used to Laravel, it's part of my work stack, so I'm pretty confident I can pick up on it, but I'm very green with EVE API, just barely started using it for some simplex for industry, and it's already quite a challenge, eheh
Crypta Electrica
28 Feb 2025 21:39
@user_155822088693743616 i deleted your thread in #channel_1345031288226054245 as I didn't intend any discussion there.
Yes backend performance is a constant development goal. And some of the 5.1 experimental features will also target performance.
Ncc-1709
28 Feb 2025 23:11
ty
Weyland
1 Mar 2025 13:30
Been looking into that planet contents issue a bit more and I got it to the point where it briefly shows the correct contents. And after another refresh it removed some items again. Tested it by clearing all rows from the database, sync the character and spam refresh while it's going.
Could it be the garbage collector that I'm seeing here?
Or perhaps the
cleanContents that removes valid rows?
Yep, fixed it!
Now it's showing this, which is correct, but there is something else the matter π
But I got the dev setup running so this makes it a lot easier
Asrik
1 Mar 2025 16:35
That's for the PI Factory? Is that for the scheduler or a command you used?
Weyland
1 Mar 2025 16:36
The Job that is running to get all the information. Adding ->where('planet_id', $this->planet_id) to it fixed it
But I'm still not seeing everything but I think that's an EVE ESI problem and not SEAT
This fix is here: https://github.com/eveseat/seat/issues/922#issuecomment-2692225669 Tested it and it seems to be correct. But I found something else I can't explain yet
But I think it's unrelated
Asrik
1 Mar 2025 16:54
I was told as well it's an esi issue too.. I hope the new version of esi will be better..
Weyland
1 Mar 2025 16:54
I wouldn't count on it but let's hope π
The caching of planetary contents on the ESI endpoint are rather unfortunate but understandable. And this fix seems to atleast show the right contents for some of the factories and storage containers (storage facility and launchpad)
I think the reason it went unnoticed is that this information is not displayed anywhere on SeAT except when you make a plugin to read that table
Asrik
1 Mar 2025 16:59
I just read your notes, you make it sound like that the data wasn't writting to the table correctly. I was about to suggest to wipe the table before collecting the data from the ESI..
Weyland
1 Mar 2025 16:59
I did. And I saw that the data was there for a split second and then was removed. So I took a closer look at the cleanContents function and found the issue
So it was in fact writing it, but then got removed right away because the missing
where clause
Asrik
1 Mar 2025 17:01
Cool. I'm willing to test it on my seat.
Weyland
1 Mar 2025 17:03
That would be great! I made a fork already but let me take a little more time and be sure this is alright
recursive_tree
1 Mar 2025 19:00
Thanks for debugging this. I appreciated the effort. Will you open a PR once it is done?
While in the past CCP has pretty much ignored https://github.com/esi/esi-issues, with the recent uptick in ESI maintenance by CCP, it might be worth it to open a bug report in esi-issues if there isn't already one.
Weyland
1 Mar 2025 19:07
I already have my eye one https://github.com/esi/esi-issues/issues/1248 and https://github.com/esi/esi-issues/issues/654
I'll see about creating a PR when I know it's all correct. I have to do some checks but I'm out for tonight
Will get around to it tomorrow I'm sure
Crypta Electrica
3 Mar 2025 13:26
@here Do you use the Cleanup Stale Data feature in SeAT at all?
recursive_tree
3 Mar 2025 13:40
For all people in the βWhat is that categoryβ, please donβt go search and enable it right now. It is broken in some ways.
Astral
4 Mar 2025 11:23
Cleaning up historic data is bad..
Crypta Electrica
4 Mar 2025 13:27
Akov
11 Mar 2025 17:47
Seat-Connector request!
Wanderer is the new hotness in wormhole mapping with a vibrant and active developer community. They have an ACL system that is backed by a robust API that is ripe for integration with Seat Based permissions!
https://github.com/wanderer-industries/wanderer
tmas
23 Mar 2025 14:35
API reference for anyone interested in building this: https://wanderer.ltd/swaggerui
This isn't a perfect solution, but it's a start. This PR queues a job to resolve killmail victims' and attacker's character IDs and corp IDs, which will hopefully run before the notification is sent. There's currently no guarantee, though - despite the notifications being queued, they are still
Notifications and not jobs so I wasn't able to use Laravel's job chaining to enforce a specific execution order. One option would be to wrap the notifications in a job, but I'd welcome feedback/ideas on how to improve this
@user_806925397265743902 Hopefully this resolves the "Unknown" entries on your killmail notifications π
@user_614098468218339348 @user_301981661761896449 Do you remember why you added a 5-minute delay before sending killmail notifications? I'm wondering if the goal was to give SeAT time to load data from ESI so "Unknown" wouldn't be displayed. If so, we might be able to speed up notifications if we can find a way to guarantee that the
EnsureRequiredDataIsAvailable job from my PR runs before the notification is sent
Gigi
23 Mar 2025 14:50
Yasss....but also looks like @user_614098468218339348 left some comments in the PR.
tmas
23 Mar 2025 14:54
Yep! Definitely needs some work, but that was my expectation from the beginning. Working on one comment now, hoping somebody might chime in on the other one where I'm not as sure of the best approach
Crypta Electrica
24 Mar 2025 10:41
I'll leave my comments shortly, but they will be short as I'm on my phone travelling apologies.
Sorry if they are a bit blunt. Takes me too long to type out when github refreshed on me. Also I think because I commented on one of the comment threads, the comments are now on an outdated commit. As stated I will get better feedback to you tomorrow
tmas
24 Mar 2025 13:52
No worries! Trying to review code on your phone is going above and beyond in my book, and mistakes are to be expected in that scenario lol. Responding to a few comments for now, hopefully I'll have a bit of time to make some changes later today so the PR is in a better state by the time you take another look π
Wibla
25 Mar 2025 06:24
https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities someone is not having a good day
Weyland
26 Mar 2025 14:06
Finally had some time to create the PR for https://github.com/eveseat/seat/issues/922. Sorry it took me a bit π
It fixes the problem for me but I can only test it on a total of 12 PI toons. If there are any takers, I'd love for someone to test the change and let me know if it aligns with what they can see in-game (taking into account that the data of planetary contents and the API is funky already).
Matt Falahe
26 Mar 2025 20:29
@user_300654930803425281 did u fix by any chance this issue with not refreshing storage tab content?
I am sure that its being refreshed on some point but old data is being kept and new is added to each time when u empty your storage / launchpad - new load is being shown on the storage tab... I have this issue for some time. This character has only 4 planets to test that. I had no time to actually dig into it.
Asrik
26 Mar 2025 20:29
Nice. Cant wait to test it out
Weyland
26 Mar 2025 20:38
Unfortunately, what happened before, is that the same type_id, let's assume Biomass in this case, on the same character, on a different or the same planet, and the cleanup runs... it incorrectly deleted the database record if the type_id occurs on the same character twice (or multiple times). A good 'visual' representation is here.
I most certainly haven't fixed the issue where the ESI API doesn't reflect the correct number of items in the storage, but I did fix items being incorrectly being removed in the cleanup, I think
The ESI is funky when reading planet contents, something that is unfortunate still
recursive_tree
26 Mar 2025 20:41
Thanks for the PR. Unless crypta picks it up it will unfortunately be a week or so until I can take a look
Weyland
26 Mar 2025 20:42
All good, it needs a proper test. Mostly with characters being removed and no database rows are left behind
You wouldn't want to have 'dangling' pins, nor contents, when a character, for example, is deleted
It took me a better part of the month to finally see expected results on prod vs dev. Where dev started to make more sense, hence the PR
Long story short: I only fixed a dedupe bug but the storage container overview still has its problems since ESI won't give us the actual contents of a planet
Matt Falahe
26 Mar 2025 20:48
ah I see
Weyland
26 Mar 2025 20:48
Only after accessing the customs office, and making a change there, it somewhat forces the ESI to send you new data
Like sending an item to or from the planet
Matt Falahe
26 Mar 2025 20:49
oh well I do that very rarely lol PI is not my favorite thing π
Weyland
26 Mar 2025 20:50
You should update and check the template generator Jay and I built. I hope it makes your PI endeavours a little more... favourable
It's pretty solid and, having built the storage overview and knowing its limitations, this one is pretty neat and close to accurate
The link distance power usage is a pain to calculate correctly but it shouldn't be far off
Matt Falahe
26 Mar 2025 20:55
oh I got my own templates done in json format so you can download and drop all in templates location for more universal use. I have people in corp that have like 100 planets in total... So coping the code of template was a pain for them. I am still developing it into all different stages.
https://github.com/MattFalahe/EVE-PI-Templates
Weyland
26 Mar 2025 20:56
Good stuff! Perhaps we can combine the two somehow
But I do like to know if my feature would replace yours and saves you some upkeep
Matt Falahe
26 Mar 2025 20:57
Its more for universal use. But now I am on the stage to sort out P2 - P3, P3 - P4 and P1 - P4... All different stages depending on what you need for industry process.
I will test that out π
Weyland
26 Mar 2025 20:57
The generator only covers P0-P1 to be honest
But looking to expand and help us PI enthusiasts out
Let me know what you think. And feedback from a large scale group really helps
I very much appreciate any and all feedback on that thing really
Based it off a spreadsheet someone gave to me and thought I can just build that into SeAT neatly
The distance calculations of each pin did need some fine tuning
It builds this stuff by default. And you can adjust it according to your CCU so you don't go over
Assumes 10 extractor heads in its calculations
Matt Falahe
26 Mar 2025 21:05
well I based mine on more efficiency... I use 8 facilities and storage + 2 launchpads.
Using more then 8 facilities is not needed for a long term P0 extraction because your planet will drop down after few cycles.
I go with approach to keep facilities in use most of the time
Weyland
26 Mar 2025 21:06
I'd love to know more about templates more suited for long-term or short-term usage!
Matt Falahe
26 Mar 2025 21:06
in my simulations if your total per day output is 1,152,000 P0 your all 8 facilities will run 24/7
Weyland
26 Mar 2025 21:08
These are based on 2 day cycles but there is so much more I don't know about. Perhaps we can implement a 'favourable-cycle-time' and generate a template based on that. I'll go and have a look at your templates tomorrow
Matt Falahe
26 Mar 2025 21:08
otherwise some will get idle so I prefer to use that spare cpu / powergrid to be able to move extractor head freely all around the planet π
Weyland
26 Mar 2025 21:09
Absolutely
Matt Falahe
26 Mar 2025 21:09
if its 2 days then after 1 day you will have only 4-5 in use, everything else will sit idle waiting for resources but extractor wont mine enough in later cycles to be used.
Weyland
26 Mar 2025 21:09
Would you mind if I pick your brain at some point so we can bounce off some ideas
You can already see that the factories are too much, and I need more extractors to keep up
Matt Falahe
26 Mar 2025 21:12
your approach will work only in like high extractions completed at its high output. After few it will drop.
Weyland
26 Mar 2025 21:13
Correct
But there is a nuance I'd like to talk to you about it seems
Matt Falahe
26 Mar 2025 21:13
this is mine from this cycle and you can see that my facilities are already idle
sure! I am always happy to help π
Weyland
26 Mar 2025 21:17
Neat! And when I was implementing this, I only considered a few players that I knew doing P0->P4 never considering any intermediary products so I went full on P0->P1 for the extractor generator not saying these should be short-run templates
It got me thinking, what if you can plug in your own templates, via JSON, and have your corp use those you want as predefined
Matt Falahe
26 Mar 2025 21:19
Well if u do like very short cycles like few hours then more facilities is needed but the longer the cycle is more of your facilities will go idle.
Weyland
26 Mar 2025 21:20
It would solve two problems. The generator that assumes (too much) and a corp having their own templates that they recommend avoiding all assumptions. As you said, it works for short extractions, but we do 2-3-7 day extractions
Matt Falahe
26 Mar 2025 21:24
well mine is for 1 - 2 days use. If u go 7 days reduce facilities and try to add more extractors I would say. But I would have to test that first.
Also I do 2 versions of each template for low skilled characters and max skilled characters. When I did those I knew that not everyone will do max skills as people often do PI on a side and not as main isk income.
Weyland
26 Mar 2025 21:26
You've given me some insight there. Let me sleep on it and give it some thought. I have some inspiration for tweaking this a bit
And since the generator only covers P0-P1, there are many designs for P1-P2 or what ever that a corp, nee, alliance want to share
But let's say a corp wants to share designs, let's focus on that first
Thanks Matt
Matt Falahe
26 Mar 2025 21:32
Well I will test that part of the plugin and I am sure we can tweak it a bit. Its also possible to merge later designs when I will finally publish all industry levels for templates. After all not everyone is going for P4 only because P3 and P2 also is being used in industry process for stuff like fuel blocks or Implants etc.
Weyland
26 Mar 2025 21:35
Exactly
I noticed that Traefik can easily be bumped to traefik:3 without any problems
It's running 2.10 at the moment
Relicted
6 Apr 2025 09:57
can someone tell me how to add the installed version detection? i am probably again just blind π
recursive_tree
6 Apr 2025 10:26
In your service provider, you can return the packagist vendor and package name. Since it already shows the current version, it seems to be set up correctly.
Is the plugin installed via the dev override? The version detection logic cannot detect plugins installed via the dev override
Relicted
6 Apr 2025 10:30
No, just tested it via βofficialβ install in the .env
recursive_tree
6 Apr 2025 10:57
but just to be sure, you don't have a dev override of the plugin active at the same time?
One potential issue I see is that you capitalize the vendor name in your service provider, but it is lowercase on packagist:
https://github.com/depotism/seat-buyback/blob/master/src/SeatBuybackServiceProvider.php#L206
https://packagist.org/packages/depotism/seat-buyback
Relicted
6 Apr 2025 12:20
thanks, will check this on the next push π
Marazmatik
13 Apr 2025 20:55
Hello? what is table where i can find alt of seat user?
Akov
13 Apr 2025 20:58
refresh_token is the only place that mapps toons to users
Gigi
17 Apr 2025 18:49
Curious which scope you are referring to here - I am running into the same problem.
Wondering if it's "medals".
won't i need this scope to pull in corp/alliance data of alts who are not in my corp?
Crypta Electrica
18 Apr 2025 01:39
I think you need to ask what your actual problem is in a coherent message... publicData is a nothing scope that you can use if you are not requesting any other scopes but still want a refresh token
Gigi
18 Apr 2025 02:03
Same problem that these guys were talking about - squads doesnβt have βdoesnβt containβ filter and scopes is a list. So this makes creating an auto squad for guests tricky.
Crypta Electrica
18 Apr 2025 02:09
Yeah so use publicData as the scope for the guests. And remove that scope from others. Then you can use contains publicData
Investigation of doesn't contain for squads is on my seat 5.1 list to look at
Gigi
18 Apr 2025 02:52
For now I've just made a manual squad (with moderators) for Guests. There aren't that many guests and either me or one of my directors can approve it.
Matt Falahe
18 Apr 2025 06:50
Make squad that has to follow these conditions. Char is not you, Corp is not your Corp.
@user_806925397265743902
Gigi
18 Apr 2025 13:15
This is supposed to auto add Guests?
Matt Falahe
18 Apr 2025 13:16
Yes if squad is auto.
I will send u screenshot how I have my done in pm
[EDENC] Prospektor Schipplock
23 Apr 2025 13:16
short question, is it possible to generate a starmap like SMT, showing all members of the corporaton, on starmap like in stellaris (which is showing the own members by blue icon ?)
recursive_tree
23 Apr 2025 13:25
Technically possible, yes, can seat do it, no
You could use a wormhole mapper and get something pretty close to this
Raiden
23 Apr 2025 16:19
Pathfinder is pretty good
Akov
23 Apr 2025 22:40
Wanderer is the new hotness
Wibla
25 Apr 2025 13:01
yeah?
Akov
25 Apr 2025 17:59
yea
invited you to their discord
its not perfect, but they are extremely active
Pymous
6 May 2025 19:26
Hey there ! I'm curious, and maybe I can try to spend some time on it ; but what make SEAT "slow" on a front end perspective ?
I have a small dedicated server for it (and Pathfinder), nothing fancy, but it's not rare that the first load in a while take between 25s to 30s and my own dashboard usually take ~10s
recursive_tree
6 May 2025 19:32
Are subsequent loads faster? Generally, some cache building has to be done on the first load
But 25s sounds a bit excessive
Pymous
6 May 2025 19:33
Yes, usually it's way faster after, for a few minutes until the next "inactive" phase happen
I also think we have a lot of job errors for our corp size 3586 fail jobs for a SEAT with 285 registered characters
SEAT is still heavy lifting some very important things for us, so it's all good ; but was curious if it's something we can help in fixing maybe
recursive_tree
6 May 2025 19:39
That looks reasonable. 258 chars generate 258x50x24x7 jobs per week, or about 2 million. 3500 isnβt much in comparison
Pymous
6 May 2025 19:39
That make sens then, thanks for the detail !
recursive_tree
6 May 2025 19:41
Iβm happy to optimize things if you can figure out what is causing slow loads
Pymous
6 May 2025 19:42
I'll try to see this week if I can put my hands into it, check what we're caching, and if I can isolate which one is so time consuming to build in the first place
recursive_tree
6 May 2025 19:43
Cache is just one thing, it could also be others, like latency from you to your instance
@user_301981661761896449
In the CheckTokenScope job middleware, is there a reason we check against the scope profile instead of the acutal scopes on the refresh token?
https://github.com/eveseat/eveapi/blob/658b429985d85c6fa0e6e8ab94ce51f995ef00e8/src/Jobs/Middleware/CheckTokenScope.php#L65-L78
Crypta Electrica
26 May 2025 11:40
Yes and no... I think it came from wanting to be able to drop back the number of scopes in a profile and have the jobs then not run. Its a bit of a misnomer though as its a bit of a bandaid over the fact that the scopes stored in the DB are not updated... We set them once and never update them. So the scopes in the DB dont necessarily anymore track with what is actually granted on the token. What we really should be doing is parsing the scopes out of the jwt access token.
Then when the scope profile is updated handle a way to tell the token to start getting reduced scopes
recursive_tree
26 May 2025 20:08
Makes sense as a feature. But I think then we should also feature a UI to view the linked profile somewhere. And we have to think through the semantics of what happens if a profile gets deleted.
Also, is there any reason/complication besides not having it implemented that we don't parse the jwt token and update the DB?
Crypta Electrica
26 May 2025 20:19
Mainly an obe thing, it's a holdover from pre jwt times.
Wibla
27 May 2025 08:40
citadel jobs for days
m0d
27 May 2025 09:04
Is it possible to setup blanket permissions for all users for example if I want all users to be able to see the moon reports by default?
recursive_tree
27 May 2025 09:12
Make a squad with every user, grant them the role
Wibla
27 May 2025 09:23
oops, I posted this in the wrong channel, sorry
recursive_tree
29 May 2025 08:22
Since the character stats endpoint is gone and the scope will be deleted soon, I'm currently deleting all references to the scope. Right now, we still have a model for the data from the endpoint, but it isn't used anywhere. Is it fine to delete it?
https://developers.eveonline.com/blog/deprecation-and-removal-of-unused-scope-2025-06-11
Akov
2 Jun 2025 17:23
bunch of chatter on eve-o-discord about the future migration to openapi v3
comin g soon(tm)
Matt Falahe
2 Jun 2025 19:01
I think for now they will do only the new ones as v3...
Akov
2 Jun 2025 19:18
sure, just has some implications π
especially since seat has its own client
Nari
10 Jun 2025 20:17
Greetings all! I'm trying to develop a small app for myself and maybe others to optimize my manufacturing, and I'm in the process of trying to inplement ESI's endpoints into it so that I dont have to hardcode everything. For now, I'm just trying to get the typeID of an item through its name, so that I can later on look up market orders using that ID to automatically update prices. (I havent gotten there yet, and if this is any indication thats gonna be really hard)
im not sure i even got the right endpoint here but this is what im trying to use: https://esi.evetech.net/ui/#/Universe/postuniverseids
heres what i got so far:
```python
def gettypeidsfromesi(names):
url = "https://esi.evetech.net/latest/universe/ids/"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
Send the list of strings directly as the JSON body
response = requests.post(url, json=names, headers=headers) if response.statuscode == 200: data = response.json()Extract from the "inventory_types" section only
return {item["name"]: item["id"] for item in data.get("inventorytypes", [])} else: print(f"Error: {response.statuscode} - {response.text}") return {}
heres how im testing it:
python
if name == "main":
testnames = ["Armor Plates", "Tritanium", "Unknown Item"]
for name in testnames:
typeid = gettypeidsfromesi(name)
print(f"Material: {name}, typeid: {type_id}")
separeate method
```
would really really appreciate some help, if i can figure this out then the other stuff would be a lot easier. im not sure this is the best polace to ask and i apologize if not!
heres the output
2025-06-10 17:06:15,894 - DEBUG - Starting new HTTPS connection (1): esi.evetech.net:443
2025-06-10 17:06:16,295 - DEBUG - https://esi.evetech.net:443 "POST /latest/universe/ids/ HTTP/1.1" 400 55
Error: 400 - {"error":"Invalid body JSON type, 'names' is required"}
Material: Armor Plates, type_id: {}
I stop it after the first cuz this is obviously not working sicne its returning 400
recursive_tree
10 Jun 2025 22:19
ESI expects an list of names to look up, but you're sending a single name
Also, you should set a user agent so CCP can identify you in case there are problems with your ESI usages: https://developers.eveonline.com/docs/services/esi/best-practices/
Nari
11 Jun 2025 01:38
ah! thanks for the response! I'll work on that then, sounds like what it says.
and thank you for the reference!
THAT WORKED!!!!!! glorious! many thanks.
Crypta Electrica
11 Jun 2025 06:44
Also may be worth looking at the SDE to have that sort of static data locally
Wibla
11 Jun 2025 06:57
You will not want to be dependent on ESI for static data like that. IMO. This is what the SDE is for
Astral
11 Jun 2025 08:40
Don't worry I already ratelimited myself for the most part and still suffering the ratelimits elsewhere.
Nari
11 Jun 2025 18:04
i just learned about it, looking into that now. I think the ESI would still be useful for updated station prices however
Wibla
11 Jun 2025 18:04
yes
100%
price data is dynamic, after all
Nari
12 Jun 2025 04:07
okay so, this might be more a python problem than it is an SDE, ESI or even Seat problem but i am truly about to lose my mind. I have this method:
python
def get_material_info(material_names):
# Get the path to the SDE
base_path = getattr(sys, '_MEIPASS', os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
sde_path = os.path.join(base_path, 'sde', 'mini_sde.sqlite')
logger.debug(f"Resolved SDE path: {sde_path}")
logger.debug(f"File exists: {os.path.exists(sde_path)}")
if not os.path.exists(sde_path):
logger.error(f"SDE database not found at: {sde_path}")
raise FileNotFoundError(f"SDE database not found at: {sde_path}")
# Connect to the SDE database
conn = sqlite3.connect(sde_path)
cursor = conn.cursor()
# Normalize the material names
normalized_names = [unicodedata.normalize('NFC', normalize_name(name)) for name in material_names]
logger.debug(f"Normalized names: {normalized_names}")
# Query the SDE database
placeholders = ', '.join('?' for _ in normalized_names)
query = f'''
SELECT i.typeName, i.typeID, COALESCE(m.manufacturingCategory, 'Other')
FROM invTypes i
LEFT JOIN materialClassifications m ON i.typeID = m.typeID
WHERE i.typeName IN ({placeholders})
'''
cursor.execute(query, normalized_names)
rows = cursor.fetchall()
logger.debug(f"Rows fetched: {rows}")
info = {}
for name, tid, cat in rows:
info[normalize_name(name)] = {"type_id": tid, "category": cat}
conn.close()
# Return the material information
return {
normalize_name(name): info.get(normalize_name(name), {"type_id": 0, "category": "Other"})
for name in material_names
}
for querying a locally made "mini_sde.sqlite" file that contains 2 tables. invTypes for item IDs and materialClassifications . they look like this:
invTypes:
https://pasteboard.co/MX366s2GDCi8.png
https://pasteboard.co/rVYlVKAgLAMF.png
but the issue i'm facing is that for SOME UNGODLY REASON it works with EVERY item but these two. SPECIFICALLY:
2025-06-12 00:56:21,169 - DEBUG - bp.name raw repr: 'Covert Cynosaural Field Generator I'
2025-06-12 00:56:21,169 - DEBUG - bp.name bytes: ['0x43', '0x6f', '0x76', '0x65', '0x72', '0x74', '0x20', '0x43', '0x79', '0x6e', '0x6f', '0x73', '0x61', '0x75', '0x72', '0x61', '0x6c', '0x20', '0x46', '0x69', '0x65', '0x6c', '0x64', '0x20', '0x47', '0x65', '0x6e', '0x65', '0x72', '0x61', '0x74', '0x6f', '0x72', '0x20', '0x49']
2025-06-12 00:56:40,541 - DEBUG - Resolved SDE path: c:\Users\nario\Documents\Coding Stuff\Eve-Code\ManuOptimizer\sde\mini_sde.sqlite
2025-06-12 00:56:41,114 - DEBUG - File exists: True
2025-06-12 00:56:44,636 - DEBUG - Normalized names: ['Covert Cynosaural Field Generator I']
2025-06-12 00:56:54,884 - DEBUG - Rows fetched: []
2025-06-12 00:56:54,885 - DEBUG - Lookup result for 'Covert Cynosaural Field Generator I': {'Covert Cynosaural Field Generator I': {'type_id': 0, 'category': 'Other'}}
2025-06-12 00:56:54,885 - DEBUG - bp.name raw repr: 'Industrial Cynosaural Field Generator'
2025-06-12 00:56:54,885 - DEBUG - bp.name bytes: ['0x49', '0x6e', '0x64', '0x75', '0x73', '0x74', '0x72', '0x69', '0x61', '0x6c', '0x20', '0x43', '0x79', '0x6e', '0x6f', '0x73', '0x61', '0x75', '0x72', '0x61', '0x6c', '0x20', '0x46', '0x69', '0x65', '0x6c', '0x64', '0x20', '0x47', '0x65', '0x6e', '0x65', '0x72', '0x61', '0x74', '0x6f', '0x72']
2025-06-12 00:57:04,667 - DEBUG - Resolved SDE path: c:\Users\nario\Documents\Coding Stuff\Eve-Code\ManuOptimizer\sde\mini_sde.sqlite
2025-06-12 00:57:04,667 - DEBUG - File exists: True
2025-06-12 00:57:04,668 - DEBUG - Normalized names: ['Industrial Cynosaural Field Generator']
2025-06-12 00:57:04,671 - DEBUG - Rows fetched: []
this is the result of another method, one whose purpose is to update all the prices i have with whats available at jita, using the typeIDs from the SDE. it works with EVERYTHING but those two
all that deugging and hex codes are just my crazy attempts at finding out if there was any hidden whitespace or something i was missing. nope. thats just how it is. so i spun up a super fast script just to test:
python
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from utils import get_material_info
# rest of your utils.py code
if __name__ == "__main__":
print(repr("Covert Cynosaural Field Generator I"))
print([hex(ord(c)) for c in "Covert Cynosaural Field Generator I"])
print(get_material_info(["Covert Cynosural Field Generator I"]))
surprise surprise, THIS actually works. the results:
'Covert Cynosaural Field Generator I'
['0x43', '0x6f', '0x76', '0x65', '0x72', '0x74', '0x20', '0x43', '0x79', '0x6e', '0x6f', '0x73', '0x61', '0x75', '0x72', '0x61', '0x6c', '0x20', '0x46', '0x69', '0x65', '0x6c', '0x64', '0x20', '0x47', '0x65', '0x6e', '0x65', '0x72', '0x61', '0x74', '0x6f', '0x72', '0x20', '0x49']
2025-06-12 00:41:55,191 - DEBUG - Resolved SDE path: c:\Users\nario\Documents\Coding Stuff\Eve-Code\ManuOptimizer\sde\mini_sde.sqlite
2025-06-12 00:41:55,940 - DEBUG - File exists: True
2025-06-12 00:42:02,459 - DEBUG - Normalized names: ['Covert Cynosural Field Generator I']
2025-06-12 00:42:05,449 - DEBUG - Rows fetched: [('Covert Cynosural Field Generator I', 28646, 'Items')]
{'Covert Cynosural Field Generator I': {'type_id': 28646, 'category': 'Items'}}
The hexes are the same as when i run it from my flask app. EVERYTHING seems to be the same. but for some reason it just doesnt work for those two items specifically no matter what i do when running from the flask route. I'm realizing thats a lot of text and i appreciate anyone who actually read through this, im losing my mind here. any help would be appreciated. oh and heres the offending route, if you'd like to see:
https://pastebin.com/b5NUq4mA
the issue is exactly on line 37
any and all help would be GREATLY appreciated.
Kiba
12 Jun 2025 05:29
Cynosaural is not the correct spelling, it's Cynosural
Nari
12 Jun 2025 05:29
no way. no way its that simple.
huh. i need to look into this, since it should be... maybe my blueprint's spelling was just wrong then...
I spent far too much time on this for THAT to be the issue, that feels so dumb. o h
print([hex(ord(c)) for c in "Covert Cynosaural Field Generator I"])
print(getmaterialinfo(["Covert Cynosural Field Generator I"]))
how did i... I just must be tired. sorry about this crashout i suppose π
definitely needed another set of eyes on it
3 hours of my life... what a nightmare.
Kiba
12 Jun 2025 05:37
Happens to the best of us, small typo that you'd never notice likely unless someone else looked at it. At first I assumed it'd be junk characters or spacing based on the debug attempt but then noticed the successful one was spelled slightly differently. π
Nari
12 Jun 2025 05:38
you have no idea how much... suffering this has caused the sheer confusion the pain the SUFFERING. nah. thank you. cuz ong i deserve all sorts of derogatory statements for such an elementary error
Wibla
18 Jun 2025 19:28
https://github.com/advisories/GHSA-gv7v-rgg6-548h y'all seen this?
Nari
21 Jun 2025 14:11
I've been digging around the SDE, but I can't seem to find the manufacturing categories as seen in game. You know the things like "Items", "Components", "Reaction Materials" the like. this is important because an aspect of the app im making uses these categories for organizational purpose, like so:
dummy data, dont look too close. I have a script that picks apart the full SDE to try and split it into these categories:
https://pastebin.com/twDxvHXd
the most important part being these bit:
python
# 2. Create materialClassifications table
mini_cursor.execute('''
CREATE TABLE IF NOT EXISTS materialClassifications (
typeID INTEGER PRIMARY KEY,
typeName TEXT,
groupID INTEGER,
groupName TEXT,
categoryID INTEGER,
categoryName TEXT,
manufacturingCategory TEXT
)
''')
# Mapping of groupName -> Manufacturing Category
MANUFACTURING_GROUP_MAP = {
# True Minerals
'Minerals': 'Minerals',
# Planetary Interaction
'Planetary Commodities': 'Planetary Materials',
'Refined Commodities': 'Planetary Materials',
# Reactions
'Intermediate Materials': 'Reaction Materials',
'Processed Materials': 'Reaction Materials',
'Hybrid Polymers': 'Reaction Materials',
'Advanced Moon Materials': 'Reaction Materials',
'Composite Materials': 'Reaction Materials',
'Gas Clouds': 'Reaction Materials',
'Ice Products': 'Reaction Materials',
# Components
'Components': 'Components',
'Advanced Components': 'Advanced Components',
'Structure Components': 'Structure Components',
'Construction Components': 'Components',
# Salvage
'Salvaged Materials': 'Salvage',
# Other Materials
'Fuel Blocks': 'Fuel',
'Datacores': 'Invention Materials',
'Decryptors': 'Invention Materials',
}
admittedly, this is not the best way to do this. im essentially trying to use the groupName column to match with the existing categories i know (like mapping Minerals to minerals) but i dont know every item or groupName in the game, much less can i categorize them all. I also feel like hardcoding this kinda thing might not be the best idea, but it may be necessary.
TLDR: is there any table in the SDE that uses Manufacturing Categories?
heres an example of the table with my bootleg classifications. its serviceable.. for now but thats just because i havent hit anything i havent explicitly categorized (this list has every item in the game... i aint doin that)
Wibla
6 Jul 2025 17:26
so uh
the blueprint listing in SeAT
type - quantity - time efficiency - material efficiency ...?
literally everyone else does ME/TE
not TE/ME
recursive_tree
6 Jul 2025 18:49
I really want that ME 20 BP though
Orsiki
18 Jul 2025 23:27
is this the place to ask for some assist on how to get some routes / views lined up with some custom permissions? I am having a heck of atime
recursive_tree
19 Jul 2025 07:29
Sure
Moppa
20 Jul 2025 21:30
Looks like there is an issue with Skyhook notifications. The notification type SkyhookUnderAttack, SkyhookLostShields etc does not contain some of the currently used fields in the templates.
I don't have a SeAT development instance up atm but I can supply Notifications data if anyone is available to look into it
recursive_tree
21 Jul 2025 06:03
yes sure, that would be appreciated
Wibla
22 Jul 2025 09:56
https://github.com/tidwall/pogocache π€
Habro
29 Jul 2025 13:57
Hey guys π
Is there a recommended way for plugin developers to observe record creatons for ESI sync? For example, if I want to process new entries, after they're created, let's say... everytime a new Contract was synced / created between ESI and the local SeAT database, I want to check if these new contract contains item X.- Eloquent events?
- Custom SeAT events?
- Cron...?
recursive_tree
29 Jul 2025 14:01
Observers for the most part
Habro
29 Jul 2025 14:02
Do you know an example plugin I could get "inspiration" from? π
Raikia
30 Jul 2025 04:23
https://eveseat.github.io/docs/developer_guides/notifications_implementation/#observers
recursive_tree
30 Jul 2025 18:07
laravel docs:https://laravel.com/docs/12.x/eloquent#observers
example: https://github.com/eveseat/eveapi/blob/master/src/Observers/CharacterAffiliationObserver.php
plus registering that observer: https://github.com/eveseat/eveapi/blob/master/src/EveapiServiceProvider.php#L168
Orsiki
13 Aug 2025 15:34
I am having a heck of a time trying to figure out how to make ESI calls for a project I am working on. I keep running into "Cannot instantiate interface Psr\Http\Client\ClientInterface". can anyone point me in a direction for some help or working examples?
recursive_tree
13 Aug 2025 16:11
What exactly are you doing? Is this in seat, or is this an eseye question?
Orsiki
13 Aug 2025 16:26
inside of seat - working on a plugin ... here is a sample of what I have NOT got working .. I am just calling it from my controller. $char = Auth::user()?->characters()->first();
if (! $char) {
return ['error' => 'No linked characters for current user.'];
}
$esi = new EsiAuthentication();
try {
return $esi->invoke('get', '/characters/{characterid}/', [
'characterid' => $char->character_id,
]);
} catch (RequestFailedException $e) {
return ['error' => 'ESI request failed', 'message' => $e->getMessage()];
} catch (\Throwable $t) {
return ['error' => 'Unexpected error', 'message' => $t->getMessage()];
}
recursive_tree
13 Aug 2025 21:35
Is there any reason you have to talk to ESI in a controller? That is generally bad practice. If possible, use a job like in eveapi: https://github.com/eveseat/eveapi/blob/master/src/Jobs/Character/Info.php
That way, you don't have to deal with authentication, esi being down, retries if the request fails, error limits and a bunch of other things
If you really have to do it in a controller, you probably want a EsiClient, not EsiAuthentication https://github.com/eveseat/eveapi/blob/master/src/Jobs/EsiBase.php#L163
Orsiki
13 Aug 2025 21:46
TY
Zax Lofful
20 Aug 2025 05:35
Can anyone point my to where I would find the code for viewing CORP assets? I want to try and add an excel output to it, but I am having a hard time finding where the code that displays the info is located in the GitHub repos. (Other tabs already have this feature funnily enough)
Crypta Electrica
20 Aug 2025 10:59
So the code will all be in the web repo. Each of those tables are what are called datatables but the code can be spread out a bit
Off the top of my head, all you would need to do would be to add a line like this (https://github.com/eveseat/web/blob/20aab327b3cce23c581ff18acf9830336bc84296/src/Http/DataTables/Common/Financial/AbstractContractDataTable.php#L146) to here (https://github.com/eveseat/web/blob/20aab327b3cce23c581ff18acf9830336bc84296/src/Http/DataTables/Common/Intel/AbstractAssetDataTable.php#L110)
Zax Lofful
20 Aug 2025 19:27
Awesome, thanks! I used ChatGPT in agent mode and it said pretty much the same thing! Thanks!
Stelios
4 Oct 2025 16:56
Hey guys! Looking to start development on a seat plugin. Is there any documentation that can help me get started anywhere?
Sorry if that's potentially a silly question π
Asrik
4 Oct 2025 18:53
https://eveseat.github.io/docs/developer_guides/package_development/
recursive_tree
4 Oct 2025 19:58
No, it is not silly. And yes, the docs are a good starting place
Matt Falahe
4 Oct 2025 19:59
This should also help https://github.com/eveseat/package-example
recursive_tree
7 Oct 2025 19:43
https://developers.eveonline.com/blog/hold-your-horses-introducing-rate-limiting-to-esi
Asrik
8 Oct 2025 05:16
I thought there was already a rate limit...
Matt Falahe
8 Oct 2025 05:46
well... if you have a bug (or more shit esi) advertise it as a feature and problem solved! π
Asrik
8 Oct 2025 05:50
https://tenor.com/view/kuzco-kronk-yzma-right-wink-gif-22358009
Crypta Electrica
8 Oct 2025 07:11
Error limit is what existed prior. So you could go super fast so long as you didn't cause errors
Akov
11 Oct 2025 16:21
There was a published rate limit, but it was enforced by ban and not by mechannism
Matt Falahe
8 Nov 2025 22:32
could someone tell me what version of SeAT stopped supporting POSes for fuel notifications?
Raikia
16 Nov 2025 20:42
i'm going back through some older bugs to try to resolve long-standing issues that are in my skillset to handle with my current knowledge of the codebase. it looks like there are some older bugs that are no longer relevant so some cleanup is needed
i've submitted some pull requests accordingly
recursive_tree
17 Nov 2025 11:25
I've seen it, thank you! Even these small things are important.
Crypta Electrica
17 Nov 2025 13:10
I just want to express much love for the contributions! Both @user_224899784257961984 and @user_614098468218339348 latest changes are now released for all to enjoy π
I am not entirely sure tbh... I will have a look for you soonish
Raikia
17 Nov 2025 16:13
not entirely sure why, but it looks like it was removed in commit 81b4a27 on July 1, 2023 as part of the discord notification addition: https://github.com/eveseat/notifications/pull/81. Possibly an oversight from back then
it's been on my list to address, plus https://github.com/eveseat/seat/issues/869 because I want to start learning the notification repo codebase. i'll see if i can prioritize adding
recursive_tree
17 Nov 2025 16:16
They were removed because they were marked deprecated in seat 4.0 and scheduled to be remove with 5.0. As for why that decision was made, no clue
Raikia
17 Nov 2025 16:19
luckily i just had a pos go offline due to no fuel on my alt so i have the test data needed to make the notification
i'll work on it tonight to see if i can figure it out
recursive_tree
17 Nov 2025 16:20
Please make sure to add it to the test data under docs/ too
Matt Falahe
17 Nov 2025 16:24
Well the reason why I asked is because all the data in SeAT with pos related is incorrect
example:
This is what SeAT provides:
fuel rates are incorrect and all what is related with this
I did add POSes to my plugin structure manager but its not released yet. I am working on notifications
Since I have the logic for POSes and all the values I was thinking to take a look and maybe fix it.
I just wanted to check if SeAT was providing POS support for highsec as well or if that was only Fuel Blocks tracking.
My new update will track all with space awareness as well and will calculate offline time based on limiting factor
Raikia
17 Nov 2025 16:31
interesting, i havent looked specifically at the pos tracking info. you should submit a bug at https://github.com/eveseat/seat/issues so we can track it and remember to look into it
Matt Falahe
17 Nov 2025 16:33
its just what I saw recently.
I have all the table names that are incorrect.
When I will have all done in my plugin I will submit this issue with detailed explanation what is wrong and how it should be calculated or just fix it myself.
Raikia
17 Nov 2025 16:33
all the math seems to be happening in https://github.com/eveseat/web/blob/master/src/resources/views/corporation/starbase/summary.blade.php and https://github.com/eveseat/web/blob/master/src/resources/views/corporation/starbase/status-tab.blade.php fyi for when you want to look at it
Matt Falahe
17 Nov 2025 16:35
For now I wanted to check what logic seat is using to recalculate timers and where are the rates for fuel stored.
What I can tell POSes had to be updated because you can find two sets of data when doing research on them.
Currently POS have fixed rate with no SOV bonuses. The only bonus they can get is from Faction and Officer versions.
Thank you I will take a look shortly.
Raikia
17 Nov 2025 16:37
that code hasnt been touched in 5 years and ngl its not very well organized π€£ . yeah definitely looks like something that should be looked at and fixed. after i do the tower resource alert, ill try to take a look here too
Matt Falahe
17 Nov 2025 16:39
yeah I did notifications for my plugin with steps for status change instead of every 1h based on notifications because no one wants to have 24 pings π€£
This is what I have in my plugin now. If you will set interval at 12 lets say as example you will receive only 2 pings when POS will be low.